gpt4 book ai didi

c# - 使用 dllimport 从 c# 使用非托管 c++ 时遇到问题

转载 作者:行者123 更新时间:2023-11-28 03:55:53 24 4
gpt4 key购买 nike

我在将 C++ 非托管 dll 导入 C# [winform] 时遇到问题。有人可以帮忙吗?

基本上,我只是想在 C++ 中创建一个安全字符串数组,然后尝试将其发送到 C#。

这是我的 C++ 代码。

extern "C" __declspec(dllexport) BOOL GetStringArr(SAFEARRAY* arr)
{
SAFEARRAY* myArray;
SAFEARRAYBOUND rgsabound[1];

rgsabound[0].lLbound = 0;
rgsabound[0].cElements = 5;

myArray = SafeArrayCreate(VT_BSTR, 1, rgsabound);
VARIANT* pvData = (VARIANT*)(myArray->pvData);

pvData[0].vt = VT_BSTR;
pvData[0].bstrVal = SysAllocString(L"FirstString");
pvData[1].vt = VT_BSTR;
pvData[1].bstrVal = SysAllocString(L"SecondString");
pvData[2].vt = VT_BSTR;
pvData[2].bstrVal = SysAllocString(L"ThirdString");
pvData[3].vt = VT_BSTR;
pvData[3].bstrVal = SysAllocString(L"FourthString");
pvData[4].vt = VT_BSTR;
pvData[4].bstrVal = SysAllocString(L"FifthString");

arr = myArray;
return true;
}

这是我的 C# 代码。

[DllImport("MyData.dll", EntryPoint = "GetStringArr")]
public static extern bool GetStringArr([MarshalAs(UnmanagedType.SafeArray)] out Array strServerList);

当我从 C# 调用 GetStringArr 时出现异常。我确定我在做一些愚蠢的事情。有人可以帮忙吗?

提前致谢。

最佳答案

C++ 代码中的几个问题。您正在返回一个数组,该数组要求参数为 SAFEARRAY**。您还在用错误的数据填充数组,您创建了一个字符串数组,但您正在编写 VARIANT。不确定意图是什么,我将在代码修复中保留变体:

extern "C" __declspec(dllexport) BOOL GetStringArr(SAFEARRAY** arr)
{
SAFEARRAY* myArray;
SAFEARRAYBOUND rgsabound[1];

rgsabound[0].lLbound = 0;
rgsabound[0].cElements = 5;

myArray = SafeArrayCreate(VT_VARIANT, 1, rgsabound);
VARIANT* pvData = 0;
SafeArrayAccessData(myArray, (void**)&pvData);

pvData[0].vt = VT_BSTR;
pvData[0].bstrVal = SysAllocString(L"FirstString");
// etc..
SafeArrayUnaccessData(myArray);

*arr = myArray;
return true;
}

C#代码:

        object[] array;
bool ok = GetStringArr(out array);

[DllImport(@"blah.dll", EntryPoint = "GetStringArr")]
[return: MarshalAs(UnmanagedType.U1)]
public static extern bool GetStringArr([MarshalAs(UnmanagedType.SafeArray)] out object[] strServerList);

关于c# - 使用 dllimport 从 c# 使用非托管 c++ 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3659139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com