<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body bgcolor="#ffffff" text="#000000">
Hello everyone.<br>
<br>
Please help me translating one function in the correct way<br>
<br>
I have a library from which I have to use some methods which is written
in C++.<br>
<br>
The method I need to correctly translate is this:<br>
<b>integer method_name(const void* a_handle, char* name, int* length)</b><br>
<br>
Now, what I tried looks like this:<br>
<b>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; [DllImport (libraryName, EntryPoint = "method_name", CharSet
= CharSet.Auto, CallingConvention = CallingConvention.StdCall)]<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private static unsafe extern integer EXT_method_name(void*
handle, out string name, out int length);</b><br>
<br>
when I test the code I receive an integer that informs me that I
delivered Invalid parameters<br>
<br>
Next I tried&nbsp; this:<br>
<b>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; [DllImport (libraryName, EntryPoint = "method_name", CharSet
=
CharSet.Auto, CallingConvention = CallingConvention.StdCall)]<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private static unsafe extern integer EXT_method_name(void*
handle, StringBuilder name, ref int length);</b><br>
this doesn't work either<br>
<br>
Then I tried this:<br>
<b>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; [DllImport (libraryName, EntryPoint = "method_name", CharSet
=
CharSet.Auto, CallingConvention = CallingConvention.StdCall)]<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private static unsafe extern integer EXT_method_name(IntPtr
handle, StringBuilder name, out int length);</b><br>
and this doesn't work either :(<br>
<br>
<br>
I have a similar method which works and looks like this:<br>
<b>integer method_name(const void* a_handle, int* length)<br>
<br>
</b>And my working "translation" is this:<br>
<b>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; [DllImport (libraryName, EntryPoint = "method_name", CharSet
=
CharSet.Auto, CallingConvention = CallingConvention.StdCall)]<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private static unsafe extern integer EXT_method_name(void*
handle, out int length);</b><br>
<br>
<br>
Any ideas about what I did wrong? I'm a total newbie with Interop
communication :)<br>
<br>
I understood correctly that when I pass strings as parameters to that
external method I have to Marshal them, but when I need strings as
output... how <br>
should I do this?<br>
<br>
In mono's wiki there is an example with StringBuilder (the strncpy
example), but either I did something wrong or some different approach
is needed.<br>
<br>
<br>
Thank you for all your efforts in helping me<br>
<br>
<br>
With kind regards,<br>
Sebastian<br>
</body>
</html>