From: William S F. <ws...@fu...> - 2007-12-17 21:10:50
|
patrickinminneapolis wrote: > I have a compiled stub DLL which mostly works fine :) but some of my .cs > functions don't actually match the Pinvoke signature so I get a compiler > error. In this class, swigCPtr is cast as a IntPtr which is passed into a > Pinvoke signature which is expecting a HandleRef. Thanks for your thoughts. > > cannot convert from System.IntPtr to > System.Runtime.InteropServices.HandleRef > > .h > void setCacheSize (signed int numBytes) > > .i > %module stub > #pragma SWIG nowarn=SWIGWARN_PARSE_NESTED_CLASS > %nodefaultctor; > %nodefaultdtor; > %include "cpointer.i" > %include "PrimateTypemaps.i" > %include "wchar.i" > %include "std_wstring.i" > %{ > #include "DatabaseConfig.h" > %} > > namespace mapcore > { > class DatabaseConfig > { > public: > mapcore::DatabaseConfig (const mapcore::String > &databasePath=mapcore::String(), const mapcore::String > &mapMetaDataPath=mapcore::String()); > void setCacheSize (signed int numBytes); > }; > }; > > stubPINVOKE.cs > [DllImport("stub", EntryPoint="CSharp_DatabaseConfig_setCacheSize")] > public static extern void DatabaseConfig_setCacheSize(HandleRef jarg1, int > jarg2); > > DatabaseConfig.cs > public class DatabaseConfig : IDisposable { > private IntPtr swigCPtr; The line above indicates you are using a rather old version of SWIG or you have your own custom csbody typemaps. I suggest you change this in the csbody typemap so that swigCPtr is a HandleRef rather than IntPtr. William |