簡體   English   中英

C#:將字符串數組傳遞給C ++ DLL

[英]C#: passing array of strings to a C++ DLL

我正在嘗試將數組中的一些字符串傳遞給我的C ++ DLL。

C ++ DLL的功能是:

extern "C" _declspec(dllexport) void printnames(char** ppNames, int iNbOfNames)
{
    for(int iName=0; iName < iNbOfNames; iName++)
    {
        OutputDebugStringA(ppNames[iName]);
    }
}

在C#中,我加載這樣的函數:

[DllImport("MyDLL.dll", CallingConvention = CallingConvention.StdCall)]
static extern void printnames(StringBuilder[] astr, int size);<br>

然后我像這樣設置/調用函數:

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);

使用DbgView,我可以看到一些數據傳遞給DLL,但它打印出垃圾而不是“第一”,“第二”和“第三”。

有線索嗎?

使用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);

MSDN有關編組數組的更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM