【发布时间】:2011-09-09 21:04:30
【问题描述】:
当我尝试从 c++ 调用 c# 代码时,我按照本文中的说明进行操作
http://support.microsoft.com/kb/828736
我的 c# 的一部分是:
[Guid("6A2E9B00-C435-48f8-AEF1-747E9F39E77A")]
public interface IGameHelper
{
void getInfo(out string result);
}
public class GameHelper : IGameHelper
{
void getInfo(out string result)
{
result = new StringBuilder().Append("Hello").ToString();
}
}
我的 C++ 代码的一部分:
#import "../lst/bin/Release/LST.tlb" named_guids raw_interfaces_only
using namespace LST;
using namespace std;
...
HRESULT hr = CoInitialize(NULL);
IGameHelperPtr pIGame(__uuidof(GameHelper));
BSTR ha = SysAllocString(NULL);
pIGame->GetInfo(&ha);
wprintf(_T(" %s"),ha);
SysFreeString(ha);
但我无法获取字符串结果值,当我尝试获取整数结果时它工作正常,但不是字符串。
我不太了解COM。请帮我。 谢谢。
【问题讨论】:
-
wprintf(_T(" %s"),ha);总是打印
并且似乎 BSTR ha 无法获取结果字符串。 -
BSTR ha = SysAllocString(NULL) - 这里不需要,因为结果是 OUT 参数。而是使用 BSTR ha = NULL;
-
在 C++ 和 C# 之间,使用 C++/CLI 进行互操作可能更简单。然后你可以避免 COM,这总是一件好事。 :)
-
@jalf 感谢您的评论。 CLI 是一个更简单的解决方案,但我真的很想找出正确的 COM 方式。
-
你能把方法签名从'out string'改成'ref string'吗?
标签: c# visual-studio-2008 visual-c++ com com-interop