我正在尝试从我制作的C#DLL中调用字符串函数(以测试COM)。我有一个名为add
的函数,该函数需要两个int
并返回总和。这似乎有效。我的另一个函数returnString
接受一个字符串并返回它。最终打印出空白。这是代码:
C#:
public class Class1 : MyClass
{
public string returnString(string a)
{
return a;
}
public int add(int a, int b)
{
return a + b;
}
}
C ++:
int main()
{
CoInitialize(NULL);
MyClassPtr obj;
obj.CreateInstance(__uuidof(Class1));
BSTR string_result = L"\0";
int int_result = 0;
HRESULT hr1 = obj->returnString(L"Hello", &string_result); // should set string_result to "Hello"
HRESULT hr2 = obj->add(5, 7, (long*)&int_result); // should set int_result to 12
if (hr1 != S_OK)
std::cout << "hr1: " << hr1 << std::endl;
else{
_bstr_t str(string_result);
std::cout << str << std::endl; // prints a blank line rather than "Hello"
}
if (hr2 != S_OK)
std::cout << "hr2: " << hr2 << std::endl;
else
std::cout << int_result << std::endl; // prints 12
CoUninitialize();
}
当我达到定义的峰值时,这就是我得到的:
virtual HRESULT __stdcall returnString (
/*[in]*/ BSTR a,
/*[out,retval]*/ BSTR * pRetVal ) = 0;
virtual HRESULT __stdcall add (
/*[in]*/ long a,
/*[in]*/ long b,
/*[out,retval]*/ long * pRetVal ) = 0;
那么代码有什么问题呢?我最近发布了一个类似的问题,发现了更多问题,但仍然无法使其正常运行。谢谢!
最佳答案
问题出在这里:L"Hello"
需要强制转换为CComBSTR
类型。结果如下所示:
HRESULT hr1 = obj->returnString((CComBSTR)L"Hello", &string_result);
其他一切都可以保持不变:)
关于c# - 从C#COM DLL调用C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35641830/