Ik zit hier te vechten met de DllImport in C#. En kom er niet echt aan uit.
Wat is er mis met onze code tags?
Ik heb hiet een C++ dll, en de header file waarin staat beschreven welke functie's exporteerd worden.
Ik wil deze graag vanuit C# aanroepen. Deze dll bestaat uit 5 functies: read, write, open, close, seek.
(dit zijn niet de volledige functie namen trouwens).
Nu kan ik open/close/seek perfect uitvoeren. En begeef me nu in de richting van de read/write fuctie.
vanuit daar geeft hij mij een error:Additional information: Method's type signature is not Interop compatible.
Ik ben vrijwel verzekerd dat dit iets met de buffer te maken heeft die word doorgegeven. Ik weet echter niet wat ik moet doen om het te repareren. Ik heb even geprobeert de Marshall larray door te geven maar dat gaf weinig verbetering.
Graag zou ik willen weten wat ik fout doet en het werkend krijgen dus men ideeen heeft hoor ik ze graag.
Wat is er mis met onze code tags?
Ik heb hiet een C++ dll, en de header file waarin staat beschreven welke functie's exporteerd worden.
Ik wil deze graag vanuit C# aanroepen. Deze dll bestaat uit 5 functies: read, write, open, close, seek.
(dit zijn niet de volledige functie namen trouwens).
Nu kan ik open/close/seek perfect uitvoeren. En begeef me nu in de richting van de read/write fuctie.
vanuit daar geeft hij mij een error:Additional information: Method's type signature is not Interop compatible.
Ik ben vrijwel verzekerd dat dit iets met de buffer te maken heeft die word doorgegeven. Ik weet echter niet wat ik moet doen om het te repareren. Ik heb even geprobeert de Marshall larray door te geven maar dat gaf weinig verbetering.
Graag zou ik willen weten wat ik fout doet en het werkend krijgen dus men ideeen heeft hoor ik ze graag.
C++:
1
2
| DATAFILEREADERDLL_API __uint ro2data_read ( ro2data_handle *handle, __uchar *pBuf,__uint BlockSize,__uint BlockCount ); |
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| [DllImport("DataFileReaderDll.Dll", EntryPoint = "?ro2data_read@@YAIPAUro2data_handle@@PAEII@Z")] public extern static uint ro2data_read(out IntPtr handle, out byte[] buffer, uint BlockSize, uint BlockCount); private void Decrypt() { IntPtr handle = new IntPtr(); if (ro2data_open(out handle, "ChatCommand.dat") == false) return; byte buffer = new byte(); ro2data_read(out handle, out buffer, 4, 4); ro2data_close(out handle); } |
[ Voor 28% gewijzigd door een moderator op 09-08-2007 20:08 . Reden: Code integraal in topic opgenomen ]