gpt4 book ai didi

c# - 使用 C++ : problem with functions with strings as parameters 中的 C# DLL

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:02:13 27 4
gpt4 key购买 nike

从这个例子开始:http://support.microsoft.com/kb/828736我试图在我的 C# DLL 中添加一个测试函数,它将字符串作为参数。我的C# DLL代码如下:

namespace CSharpEmailSender
{
// Interface declaration.
public interface ICalculator
{
int Add(int Number1, int Number2);
int StringTest(string test1, string test2);
};

// Interface implementation.
public class ManagedClass : ICalculator
{
public int Add(int Number1, int Number2)
{
return Number1 + Number2;
}

public int StringTest(string test1, string test2)
{
if (test1 == "hello")
return(1);

if (test2 == "world")
return(2);

return(3);
}
}

然后我使用 regasm 注册这个 DLL。我像这样在我的 C++ 应用程序中使用它:

using namespace CSharpEmailSender;
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
// Initialize COM.
HRESULT hr = CoInitialize(NULL);

// Create the interface pointer.
ICalculatorPtr pICalc(__uuidof(ManagedClass));

long lResult = 0;
long lResult2 = 0;

pICalc->Add(115, 110, &lResult);
wprintf(L"The result is %d", lResult);

pICalc->StringTest(L"hello", L"world", &lResult2);
wprintf(L"The result is %d", lResult2);

// Uninitialize COM.
CoUninitialize();

return 0;

运行后,lResult 是正确的(值为 225),但 lResult2 为零。知道我做错了什么吗?

最佳答案

如果不尝试编译它,互操作可能期望字符串是 BSTR 类型。您可以尝试以下操作吗?

pICalc->StringTest(CComBSTR(L"hello"), CComBSTR(L"world"), &lResult2);

pICalc->StringTest(::SysAllocString(L"hello"), ::SysAllocString(L"world"), &lResult2); 

关于c# - 使用 C++ : problem with functions with strings as parameters 中的 C# DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3081965/

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