【发布时间】:2012-05-31 00:41:27
【问题描述】:
我知道有很多关于将指针从 C# 程序传递到第三方 C++ dll 的讨论。但我的情况很特殊。
我有一个第三方 C++ DLL,我在其中调用了一个函数:
[DllImport(@"ThirdParty.DLL", EntryPoint = "?ThirdPartyEntryPoint", CallingConvention = CallingConvention.Cdecl)]
public static extern Int16 ThirdParty_command(uint p1, ushort p2, uint[] data);
现在棘手的是,“uint[] data”中的元素之一是一个字符串指针,它指向 C++ 中的一个字符串(类型:unsigned char)。我试过了,但它不起作用:
String name = "myName";
fixed (char* nameAddress = name)
{
uint[] data = { 0x00, 0x01, 0x02,(uint) nameAddress };
Int16 result = ThirdParty_command(0, 0, data);
}
【问题讨论】:
-
“不起作用”是什么意思?不会编译?例外?请通过发布您收到的任何错误消息来具体说明。
-
您将
Int16(内部名称)与uint(简写名称)混合在一起。为什么?public static extern short ... -
这肯定是一个结构而不是一个 uint[]?
-
它会编译。 ThirdParty.DLL 给出错误“参数过多”
-
抱歉,在我的第一个问题中,C++ 指针是“char*”,而不是“unsigned char”