我正在使用C语言编写的DLL运行时到C#中。 我在下面发表声明。
typedef void *JCCP_PROPERTY_HANDLE;
在功能中,它被用作:
JCCP_RESULT __JCCP_FUNCTION__ jccpGetProperty(
JCCP_HANDLE hjccp,
const char *name,
JCCP_PROPERTY_HANDLE *phproperty);
现在我想在我的C#代码中调用jccpGetProperty()方法。 任何人都可以告诉我如何从C#传递第三个参数(JCCP_PROPERTY_HANDLE * phproperty)。
我尝试使用以下代码,但没有工作。
外部方法:
[DllImport(DLL_NAME, EntryPoint = "_jccpGetProperty", CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr jccpGetProperty(IntPtr hjccp, string name, ref IntPtr JCCP_PROPERTY_HANDLE);
用法
IntPtr handle = IntPtr.Zero;
string tag = "server.version";
var result = jccpGetProperty(hjccp, tag, ref handle);
有人可以帮助我吗?
答案 0 :(得分:3)
IntPtr
是void*
的正确类型映射。本机类型void*
通常用于不透明指针,并在C#中映射到IntPtr
。
我们可以验证的p / invoke声明的那些部分是正确的。无法辨认的部分是:
cdecl
,但我们无法检查。 int
或uint
更有可能。这将在64位进程中产生影响。 因为你只展示了部分代码和细节,所以很难说更多。您必须验证我们不能的程序的所有部分。
我建议你从使用C或C ++代码开始并转换它,寻找代码和C#转换之间行为的第一个偏差点。