visualstudio2008-如何使用COM将字符串从c#传递到c++
本文关键字:c++ 字符串 何使用 COM visualstudio2008- | 更新日期: 2023-09-27 17:58:45
当我尝试从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。请帮帮我。非常感谢。
根据Msdn,如果在传递NULL时调用SysAllocString,它将返回NULL。
因此,您不是在COM接口中传递对NULL指针的引用吗?如果是这样的话,哈就永远不会有人居住了?(我不确定COM,所以可能是错误的)
通常,您的代码应该可以工作,但首先要确保它正确编译,因为GameHelper
内部的void getInfo(out string result)
应该是公共的。则CCD_ 3应当再次与CCD_ 4固定。因此,您可能正在运行旧版本的代码。
将C#代码更改为:
[Guid("6A2E9B00-C435-48f8-AEF1-747E9F39E77A")]
public interface IGameHelper
{
string getInfo();
}
public class GameHelper : IGameHelper
{
public string getInfo()
{
return "Hello World";
}
}
然后你的C++客户端:
HRESULT hr = CoInitialize(NULL);
IGameHelperPtr pIGame(__uuidof(GameHelper));
_bstr_t ha = pIGame->GetInfo();
wprintf(_T(" %s"),ha);
这应该工作