War*_*pin 4 c# dll pinvoke marshalling
我正在尝试将数组中的一些字符串传递给我的C++ DLL.
C++ DLL的功能是:
extern "C" _declspec(dllexport) void printnames(char** ppNames, int iNbOfNames)
{
for(int iName=0; iName < iNbOfNames; iName++)
{
OutputDebugStringA(ppNames[iName]);
}
}
Run Code Online (Sandbox Code Playgroud)
在C#中,我加载这样的函数:
[DllImport("MyDLL.dll", CallingConvention = CallingConvention.StdCall)]
static extern void printnames(StringBuilder[] astr, int size);<br>
Run Code Online (Sandbox Code Playgroud)
然后我像这样设置/调用函数:
List<string> names = new List<string>();
names.Add("first");
names.Add("second");
names.Add("third");
StringBuilder[] astr = new StringBuilder[20];
astr[0] = new StringBuilder();
astr[1] = new StringBuilder();
astr[2] = new StringBuilder();
astr[0].Append(names[0]);
astr[1].Append(names[1]);
astr[2].Append(names[2]);
printnames(astr, 3);
Run Code Online (Sandbox Code Playgroud)
使用DbgView,我可以看到一些数据传递给DLL,但它打印出垃圾而不是"第一","第二"和"第三".
有线索吗?
小智 5
使用String []而不是StringBuilder []:
[DllImport("MyDLL.dll", CallingConvention = CallingConvention.StdCall)]
static extern void printnames(String[] astr, int size);
List<string> names = new List<string>();
names.Add("first");
names.Add("second");
names.Add("third");
printnames(names.ToArray(), names.Count);
Run Code Online (Sandbox Code Playgroud)
MSDN 有关编组数组的更多信息.
| 归档时间: |
|
| 查看次数: |
10492 次 |
| 最近记录: |