Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #112290

RE: Issue with ctypes and callback functions

Path csiph.com!aioe.org!news.mixmin.net!news.unit0.net!fu-berlin.de!uni-berlin.de!not-for-mail
From Bill Somerville <BSomerville@flexerasoftware.com>
Newsgroups comp.lang.python
Subject RE: Issue with ctypes and callback functions
Date Wed, 3 Aug 2016 13:21:08 +0000
Lines 46
Message-ID <mailman.144.1470231341.6033.python-list@python.org> (permalink)
References <0E5668E32633FB4FBBA1709825C0EDFDD24AAE@SCHEXMB2.acresso.com> <CACL+1aufZSd6kcDP9FSEx4zeZ2zBCnM7jucRprGiDSxddB0GSQ@mail.gmail.com> <0E5668E32633FB4FBBA1709825C0EDFDD24B77@SCHEXMB2.acresso.com>
Mime-Version 1.0
Content-Type text/plain; charset="utf-8"
Content-Transfer-Encoding base64
X-Trace news.uni-berlin.de vlDxqiczoizMCfh5pT6IhgZRNOnw25WW/67dXyjdBM5A==
Return-Path <BSomerville@flexerasoftware.com>
X-Original-To python-list@python.org
Delivered-To python-list@mail.python.org
X-Spam-Status OK 0.000
X-Spam-Evidence '*H*': 1.00; '*S*': 0.00; '#include': 0.07; 'attributes': 0.07; 'classes.': 0.07; 'nicely': 0.07; 'wrapped': 0.07; 'wrapper': 0.07; 'api': 0.09; '*);': 0.09; 'already.': 0.09; 'callback': 0.09; 'called.': 0.09; 'res': 0.09; 'subject:ctypes': 0.09; 'typedef': 0.09; 'typeerror:': 0.09; 'python': 0.10; 'def': 0.13; 'wed,': 0.15; 'argument': 0.15; 'message-----': 0.15; 'prototype': 0.15; 'subject:Issue': 0.15; '(c_int,': 0.16; '2016': 0.16; 'above?': 0.16; 'ctypes.': 0.16; 'email addr:gmail.com]': 0.16; 'member;': 0.16; 'received:10.255': 0.16; 'received:io': 0.16; 'received:psf.io': 0.16; 'wrote:': 0.16; 'pointer': 0.18; 'aug': 0.20; 'extension': 0.20; 'to:name:python-list@python.org': 0.20; 'arguments': 0.22; 'ctypes': 0.22; 'parameter': 0.22; 'parsing': 0.22; 'struct': 0.22; 'trying': 0.22; 'am,': 0.23; 'errors': 0.23; 'passing': 0.23; 'skip:+ 30': 0.23; 'tried': 0.24; 'import': 0.24; 'header:In-Reply-To:1': 0.24; 'skip:- 40': 0.25; 'module': 0.25; 'defining': 0.27; 'function': 0.28; 'fine': 0.28; 'be:': 0.29; 'callable': 0.29; 'print': 0.30; 'code': 0.30; 'extend': 0.31; "can't": 0.32; 'skip:_ 10': 0.32; 'bill': 0.32; 'point': 0.33; 'class': 0.33; 'problem': 0.33; 'int': 0.33; 'interface,': 0.33; 'wrap': 0.33; 'skip:- 10': 0.34; 'changing': 0.34; 'handle': 0.34; 'sent:': 0.35; 'could': 0.35; 'cc:': 0.35; 'subject:': 0.35; 'but': 0.36; 'created': 0.36; 'email addr:python.org': 0.36; 'to:addr:python-list': 0.36; 'subject:: ': 0.37; 'received:10': 0.37; 'being': 0.37; 'thanks': 0.37; 'list.': 0.37; 'creation': 0.38; 'does': 0.39; 'easily': 0.39; 'from:': 0.39; 'build': 0.40; 'to:addr:python.org': 0.40; 'where': 0.40; 'subject:with': 0.40; 'questions': 0.40; 'address': 0.61; 'here.': 0.62; 'cast': 0.66; 'email name:python-list': 0.67; 'receive': 0.71; 'august': 0.75; 'received:104': 0.84; 'struct.': 0.84; 'shadow': 0.91
DKIM-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; d=FLEXERA.onmicrosoft.com; s=selector1-flexerasoftware-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=os16O2sDyAdSPBn6alTSTeZzDnsfsV79PFsyO/hcalI=; b=Mk+WOhoyBcNEYZIOOafVbZD2RbxYlIL++n7d8+APigDP3mOqqFxI/1D2WeV6ARYnoGr32B4zKSwOZY35cVbD7z+7jTvzFe6U+EAQLDeFZzEw5RacWxiH2IXT+KW5l5h/0WiSZkvWLeijTyyB//ziwwV4fGoHJR6elUmuLzlcTf4=
Authentication-Results spf=pass (sender IP is 162.244.223.1) smtp.mailfrom=flexerasoftware.com; python.org; dkim=none (message not signed) header.d=none;python.org; dmarc=bestguesspass action=none header.from=flexerasoftware.com;
Received-SPF Pass (protection.outlook.com: domain of flexerasoftware.com designates 162.244.223.1 as permitted sender) receiver=protection.outlook.com; client-ip=162.244.223.1; helo=smtp.flexerasoftware.com;
Thread-Topic Issue with ctypes and callback functions
Thread-Index AdHtasD2xLoVF7NDTBuKZ7W4tqHDjgAP/oqAAAhUUfA=
In-Reply-To <CACL+1aufZSd6kcDP9FSEx4zeZ2zBCnM7jucRprGiDSxddB0GSQ@mail.gmail.com>
Accept-Language en-US
Content-Language en-US
X-MS-Has-Attach
X-MS-TNEF-Correlator
x-originating-ip [172.17.0.4]
X-EOPAttributedMessage 0
X-Forefront-Antispam-Report CIP:162.244.223.1; IPV:CAL; SCL:-1; CTRY:; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(7916002)(3000300001)(438002)(199003)(377454003)(24454002)(13464003)(189002)(86362001)(305945005)(54356999)(2920100001)(47776003)(189998001)(92566002)(23676002)(356003)(5250100002)(19580395003)(26826002)(50466002)(55846006)(81156014)(102836003)(8676002)(2950100001)(33656002)(97736004)(107886002)(2900100001)(9686002)(22756006)(7696003)(87936001)(5640700001)(2906002)(53416004)(19580405001)(7736002)(80792005)(2501003)(22746007)(81166006)(50986999)(104016004)(110136002)(76176999)(68736007)(69596002)(106466001)(450100001)(6116002)(8936002)(586003)(7846002)(3846002)(2351001)(7099028)(79686003); DIR:OUT; SFP:1102; SCL:1; SRVR:BN3PR05MB2769; H:smtp.flexerasoftware.com; FPR:; SPF:Pass; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en;
X-Microsoft-Exchange-Diagnostics 1; BL2FFO11FD009; 1:gFXLBWs0QbSmks3u10U/hUGodFxwg5hEtuZ1tGUCt/M7NbxLhwsiQMdlEX9TTZsKS8jv1C1NCkSSPuSxIyfeKGjhb0vEMeUcbYV806hDu1ddMfG9zwzaBTS1a78YUfvnZIaB+TlZDzMTqNc4RZEnWgf+JNnJ43DceoUx9fLarS0PCgXkre9QWN8Irrz3xF1+e6U+9kHvY9lcdK1ZrrEZADdvvorQVegVXjYepSZ9HejG719LJC+GmJMk7Bdc9ztj5lAtSio1vQeFupXa6v1xgk+h0Df8mQV9RyUMx6MMr35rN5EpNSKnMuccxQA318xHTgxLxInvzB0Ayo/cfO7UwG+JTypdHKLbKgQja+dxDZUCL6ZuA4K2zN8wmhkUmNQ3MCBETWSc/ayBrz3i9+/XpZ1YYuGceOoDVeyQzPR58gdvERghHHKCA2KajHEP00zU1akMzQcdUQ5/MKe0+9UjvrCN5AfEjBxOuuDjSUOd7M43G6dV1CmU22WlNbx4pqQF
X-MS-Office365-Filtering-Correlation-Id 28168e3d-b7d5-43e0-e3d4-08d3bba108b9
X-Microsoft-Exchange-Diagnostics 1; BN3PR05MB2769; 2:nDgMyvr4+csIbvNxBimgDwsRT+anfLV9gW1u/tpQhix5ujdIOfTcC0eoCxdTJzhYPi+jIFy2l3Vjfv5JmCGSpwBHdMBsSoq6Tfed8JzFQHSG9HK2P0z+6GdO1Qvzirnk0aIH0EWKDQPnrxiqA0usgEfvovdR6yp1M86bRkDmd2qbJTDIOX3u2erl/Bzsb5uv; 3:MKDMxbZjrPx3mZ/DX7ZiRp9zwj51W61BFhFPzsH1gjub3qJS/+iA8zTBTfJ2gik79SNu0Gg0fuQfso+stPq1gPAzfw/kv0DqQ9ZO2btUnnKtxBQEWuot4uHCn8j9vgSrzaMDCXE8vrehGCROKRUHFAcz7VhFaxAfsxLXmfA9S0V/0V1KIMEd37pkU2wUrNdXf/RBM9gJZVP+Ra6VJV+k5Y0bILmzaiR+a5xU6jN1LDUqFbcHaOlXTqyWsQsudehbTKP/+Ovw/oUtoT4g/YMpYw==
X-Microsoft-Antispam UriScan:; BCL:0; PCL:0; RULEID:(8251501002); SRVR:BN3PR05MB2769;
X-Microsoft-Exchange-Diagnostics 1; BN3PR05MB2769; 25:EPNBUST+f0cmLHwB+UaWsqaUE+bmk9nLgBHwncM0E06+9ICm30ug6Xf6tErG5wMuChnYEK1ZJx8zQ+a/ZL+lFJT/nmGwzhfx6xSqVxqVBOFvt8BU5ZoTHDkTloFqw3Ui2qeVngTunCOFB2G5A8Hyls6Uq1osrB9lF+SAgQKD6Zv2cWqKPpAcRHSpJEhlFyBOX97znYoJOCa7GG6bP7ZRMzl+HESHKCtjDa1IObvTyLQgwUr6Y6gCsHQkx1mXKjFe/ERx3InEhXsNHnCV+HbwppLelUgvbTYEL/0/0HFHbRzedZxWNtglXH40CGzvaTHVE3Kk04pGywc/Z0hyadUoSBqqftbRj8UygtorrUM2gHAmDyFrsLIO0yT/2e9bgMTiPWKH4NFU+OeSNL1nwF4FJRbfL20n8ZjL4LH5RhWBhoimTYZbPnmqYKPFWA+IP2PsX9c2xkQ1elSL4GqHw+zB3zYte3vNvu6otGfGasWI3DHBkdvGLfE6tV3R0EFhXULdCm5BPh7K2GHghpmhsS5OW1yNn4OV6zcwjVlPazx4egY71v4elN4sjuINttz6rJ99JbWUCRmep0fTm0FoLOpKOIZCoH/msb3hf8i98periFzHxDtCF2V6PFTAIKLQiiuXsqzH8QB6bs83+Hlsud1PEKoNIZD0MoqsWnAsdXJkAse1xVo52DZYF+kd4r2rIpwyHcdvd6kJJUqQ+vdcDJlsgDSkc7sB+qzPIlrcqLlnwx/SPZtCCi8R4Mid2rUNewmQ
X-Microsoft-Exchange-Diagnostics 1; BN3PR05MB2769; 31:C/BNGI2Lkk/vBtvopiA5gz+FoaDzExrmCc/4OOHBg10T3+kc0xFEZ/y90gnm/O1u1XNhFTSz9x2RuwK9NqCG1sYK5iARC2SDE531m1ppSWGI700VWB8nhx6QCV1dou7hB4l0PWBghXkoMXOFN5/OHG2UBJ5rI5n44HOVs1J+cU0LX1W23jmJH//7SQymN4wUR+yIrgC1NytIqaEScedjyUevLlKP8Uu6Ugojo573o9Y=; 20:lFhWAYL3P7Wxd9BkiRJ/X7Uaot3YhEXlq5aK4ibh+aA95bQaM2uTlCkep1Koo8kj1VLUkQud9gvfyBBKZYWV2C/yfFUCYYXKMSA4oxn63QjYSVQ1wesolOlh0p0UTMYpB/mUgPbJTwmesPinJqFsqq5Xyl20f+e3cG97RdZf+9+FdepxLtd67i2/F3StCJ6XrGOBCG/HSaiQZudXHFnn83H04wPVEFpNW9UTkmDmIFMGrRN0NEXCteMFn8Qfe1OItFjnbH1EcffgJ1zase7aeVow/8q4i5WaFLHV5+gnDUwfV9MBHhQ1UTV0VQVqR1Cy1cgInaeKvbZCgUFRGCFbnzi2TnT+wEW3nqqLeO/hHwoA1VUuHVLK5/rGGFa2A0w2AKgPyudo9h4V+GKWvUyUGSfDouU3ooNaKe4PhVb0l4VYi6zoG4d+GbSiDDU3DbtypYe29plpHo7LP8uPnYbVeqH4yjN2I9+6IDkrJdxmOgkdPdIGl8615PJD44n9C0J9
X-Microsoft-Antispam-PRVS <BN3PR05MB27699989E34F84AF62F520BCA5060@BN3PR05MB2769.namprd05.prod.outlook.com>
X-Exchange-Antispam-Report-Test UriScan:;
X-Exchange-Antispam-Report-CFA-Test BCL:0; PCL:0; RULEID:(601004)(2401047)(13020025)(13024025)(13013025)(13023025)(8121501046)(5005006)(10201501046)(3002001); SRVR:BN3PR05MB2769; BCL:0; PCL:0; RULEID:; SRVR:BN3PR05MB2769;
X-Microsoft-Exchange-Diagnostics 1; BN3PR05MB2769; 4:sgknMAjx1XnlD3RNtYkFahEQjlV/EvZbd3rc5tC57mRi2QeeZXX0o8IinsyJ97V/O9zNSqVo0Ctpc4e1QnS28I0W7LZyKsjtLua3gvqNcB9mQ3tEkJOQYfnJSJsLxGU64R1xh7dLjkitAvXppkIPvNLaswxTOnEWylKrXOpNuZhW/9OV003y62xjsxpGIIiqUEizghOXQSonQkay/mSFNEGED7Q813bU8/1snLuZSmue15HKoTyBk75FtzOV4V8HrUTB5aDszwUXOpfyj07tNngvC9+CqzMoDCSdp3/aKv0juiBmXQydFhkx8MAbPYjRA1Za5OBXMyJpAKBGB6o/KGiR70rpT9k6oXKCuKt2FPTSlTvpwqNkgTiR61i7fXulUqpbBtBe62jWyDNU5IezHWID8yO77cEWzh4xtsnSoQc4v/EKc7hPdJzczJYxSS/w
X-Forefront-PRVS 00235A1EEF
X-Microsoft-Exchange-Diagnostics 1;BN3PR05MB2769;23:/6DeHhBAEnv95uTYFjlbjIFCva0vsoI1gZ5W/gBNtdqQ4qvFjsSZQE5aPvYlpR2FPMtemvir3E4vFQkQsMAsIt/JgGw81MHGlI8FsZ4SMfKlb/qjdAvBEq2tj/R6dlbLqVw+c+3PsWSO+N/qBXRu+SdvFAcTJh86DSyzGe4VEsYRIXd/cRSfyuAeiA4zJX0c7XgrN9ZH2T/Pen3jqswmqKXrAZmXVrdBUo5g5imk4pP2SnNQ0CubHOgb76WQXV8hCYkATZRV5jMrkoqHwvw/s94Jmy8nhaIHVb/dHUn83VYHYxElhaRC6+tnumtlKojejuK5MGWS3lnkLl//K4/CMJJRicvVo9NjQO4efwCkJ9IERUsUXhUZ9OYB4oUlzXbo+yzsh1K4HFUfzqru3ne3f7tT65UXw+kx0Ia+lhES+fUklnwvbGcjZOv7IAmNgRc69SRN7WhTTsu0lVcWZ21sUtHmLL84tVxsX/YZqXe6AV4I1iLRM41XzFMU4xYVSDNhiy3Rr/MtgkFjgWmgP0QSVFy+T81PK37gfV9gQjNxfUvDpRhglWXBS9aET+exUbuutBbDGx+fGpjcC2EJ3vtdP0XRrWCqKv8F8PP1KLHJLOxZW0P2SlX0mgKcFpb0RudptScgBLxWEHejjHNboPhfkc4a/Z8zJxSYf7FtVv4TOJBXph1/1eO4hZ65QRdDdsKUECffFAV7xxtyZs7m24Y+82TYUTfgis9z0wc1N8sfMzVJCFHjTDYG30w1hBlTYiqcq40UZdcWnCvR1GoZaRHdHwEw/GBTrc+I6fTfSXgcMfJCTH0xAwtXKaN+SzN/+n8uQXX+kQFM8EGsP/UIiM4wFNSetf/FQmk9I8fU91stCEAFx7LVhT+NBbEfwAAj31B0VQTfdMstoaR8FPZ9WCMy66DoejZXwSnCjtDiAz0nML6qM3ITFiCoODokRuUtSLeDb3Gqze9NogS+SaJ1ofy+vn3QiWqFKBknfW9vWhvktjDa/UNWwEMjo8UdwAvm5z7uGMFq9FIzcyHlpP9bL3UHQIRXZXf0iNL+7f167neWPgY9a1KLsikn/OQg/unKF+EHgDCBViaB5MWWisyZ/RS9cFw2E1vZ9rQOLzVjfTyYFuPArmAGBPjMeRV0vZZU0gymcgIvwco0aWcktkZEFyATCQFY5eDIz1aX1dmge8RK0zcqSXl8maOrvny8i5YO7XazC0wfvDic9CYf6Ev0NgSfVVyTaaVqmOxX+8FHgVhdLubP4sxBEBCw7CxEN1TAnaWEACDTb+aLbH8xjXzPobhJqPidAEnp3iT5rm152F3e2q9CIza20MXg2aXV5kLdPSPnIh5HbvadcJua2dr/pccsJH06iUNburpUpqC8ww4TKcDvbilzEAmcjk4eTAxxL3uhtRSuN4a2ZbYbEW+WKY103s+/UDSLMXPq7S9Ci0Nt3Mc=
X-Microsoft-Exchange-Diagnostics 1; BN3PR05MB2769; 6:EcBF6chA4Qq6X3BcDgF+7z7bQYMN3feVoDLW/rsbXGixdUDjqa19uuxETQ97yoTYYbSMS796PJ99mr64hUk87nXs2pOdSl8IEdmDMaW7+Tyr8+Y7Wc9EIUH989/Hi8lSWweiSf2nx99vEw+aiSBmNA5PMgi4DAYf1Zdl266HH9Thp0NFtZVyRoIAXGBd0me7ob+D6YPz8V6Ad+2lnswqr3YH6RSvMVOEr0Ac2YW6aCSG5CFgDPVw/iLTZINbWEejKYHWKnBzbBZwuaNFg3QdvvVfiVXCCWxPfV/MjJfKpfo=; 5:7in9mh/aT3Id/m2JQsQ7RE5gp6GLFTz2OY1PX9CUje9hoWI0/UcL+M2HiigyrEPCDBcjyAi+OHilAXjyrM+1UyywE9wNlr5M7cFHwfz5WfzrZZQkfmuIU4/4PoMigL1/ocGGvXgstWInIwwU168Hpg==; 24:eJKJwNlPDIKGTOm6wkoh3dzTCjb6GWBTHnhpfVkFvJpdk72hOMDbO20MCfV1gHYF46duOvFmayjbUu0V73QQacWJNm/OrCEj4QUy7i3BpQ0=; 7:2IgPzWKKyZaVDUqqEKUPn7f/TBErWL6KSp5xIMnD8tK714QMAsR3Lx730R0E5t5LgmUaBQlXMh7/cYQjDW1tx01lpHXyRR9A3Kb1qHcPxB3j/epzt1DVxOFqa2OtAu8vLhLKJj6ZyGf3FtmvPc3Of7QOfY4HQW0FA+Z2fhOYirjqMixzbhDqVgiAenlWpDaQKJIanyEbnHswCijoQj3BDTTkAr0850FjxFkxOjvpFkk3VfBUqecWUVaDUbCsm7Cv
SpamDiagnosticOutput 1:99
SpamDiagnosticMetadata NSPM
X-OriginatorOrg flexerasoftware.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime 03 Aug 2016 13:21:09.7248 (UTC)
X-MS-Exchange-CrossTenant-Id 91034d23-0b63-4943-b138-367d4dfac252
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp TenantId=91034d23-0b63-4943-b138-367d4dfac252; Ip=[162.244.223.1]; Helo=[smtp.flexerasoftware.com]
X-MS-Exchange-CrossTenant-FromEntityHeader HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped BN3PR05MB2769
X-Mailman-Approved-At Wed, 03 Aug 2016 09:35:41 -0400
X-BeenThere python-list@python.org
X-Mailman-Version 2.1.22
Precedence list
List-Id General discussion list for the Python programming language <python-list.python.org>
List-Unsubscribe <https://mail.python.org/mailman/options/python-list>, <mailto:python-list-request@python.org?subject=unsubscribe>
List-Archive <http://mail.python.org/pipermail/python-list/>
List-Post <mailto:python-list@python.org>
List-Help <mailto:python-list-request@python.org?subject=help>
List-Subscribe <https://mail.python.org/mailman/listinfo/python-list>, <mailto:python-list-request@python.org?subject=subscribe>
X-Mailman-Original-Message-ID <0E5668E32633FB4FBBA1709825C0EDFDD24B77@SCHEXMB2.acresso.com>
X-Mailman-Original-References <0E5668E32633FB4FBBA1709825C0EDFDD24AAE@SCHEXMB2.acresso.com> <CACL+1aufZSd6kcDP9FSEx4zeZ2zBCnM7jucRprGiDSxddB0GSQ@mail.gmail.com>
Xref csiph.com comp.lang.python:112290

Show key headers only | View raw


-----Original Message-----
From: eryk sun [mailto:eryksun@gmail.com] 
Sent: 03 August 2016 13:16
To: python-list@python.org
Cc: Bill Somerville <BSomerville@flexerasoftware.com>
Subject: Re: Issue with ctypes and callback functions

On Wed, Aug 3, 2016 at 9:38 AM, Bill Somerville <BSomerville@flexerasoftware.com> wrote:
>
> Is this a good place to ask questions about the above?

Discussing ctypes is fine here. There's also a ctypes-users list.


Thanks Eryk,

I am trying to handle Python callback functions in a SWIG interface, SWIG does not support callbacks where the target is a Python callable but I can do this with ctypes. My problem is that I need to have the callback receive a SWIG wrapped type as an argument by reference. I see that if I use a ctypes.Structure type then it works nicely but I have a huge and changing API to wrap and do not want to manually describe every C struct with ctypes.Structure when SWIG has already automatically created its own shadow classes. The SWIG struct wrapper is just a class wrapping a pointer so can be easily be passed just like ctypes.Structure can be. How do I tell ctypes that it needs to reconstitute the type from an address in the callback thunk it generates?

I have tried defining from_param() and self._as_parameter_ for the types which works for passing to a function but I don't need that as SWIG does that already. With callback arguments I get various errors depending on what methods/attributes I supply like:

Parsing argument 0
TypeError: cannot build parameter

At the point where the callback is being called.

To summarize:
++++++++++++++++++++++++++++++++++++
C API like:

typedef struct {
    int member;
    /* ... */
} my_type;
typedef int (*pfn) (my_type const *);
int fn (pfn);

Implementation could be:

#include "api.h"
int fn (pfn cb) {
    my_type t = {42, /* ... */};
    return cb (&t);
}

I want Python code like:

from ctypes import *
import api  # SWIG extension module

def my_cb (t):
    print ('in callback with:', t.member)
    return 0

proto = CFUNCTYPE (c_int, my_type)
cb = proto (my_cb)
res = api.fn (cast (cb, c_void_p).value)
print ('fn returned:', res)

------------------------------------------------

I can extend the SWIG shadow class to do the creation of the prototype and thunk, the required cast above and any extra attributes or methods like _as_parameter_ and from_param() but I can't see any way of having the Python callback (my_cb) magically receive the SWIG wrapped 'my_type' struct.

TIA
Bill.

Back to comp.lang.python | Previous | Next | Find similar | Unroll thread


Thread

RE: Issue with ctypes and callback functions Bill Somerville <BSomerville@flexerasoftware.com> - 2016-08-03 13:21 +0000

csiph-web