首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#调用ATL写的COM组件的字符串有关问题

2013-04-02 
C#调用ATL写的COM组件的字符串问题我用ATL写了一个COM组件,接口很简单interface ICmd : IDispatch{[id(1)]

C#调用ATL写的COM组件的字符串问题
我用ATL写了一个COM组件,接口很简单


interface ICmd : IDispatch{
[id(1)] HRESULT Execute([in] BSTR cmd, [out, retval] BSTR* result);
};

功能实现就是直接返回一个字符串
STDMETHODIMP CCmd::Execute(BSTR cmd, BSTR* result)
{
// TODO: 在此添加实现代码
try
{
if (NULL == result)
{
return E_FAIL;
}

*result = new TCHAR[20];
ZeroMemory(*result, 20);

_tcsncpy(*result, _T("test"), sizeof(_T("test")));
}
catch (...)
{
return E_FAIL;
}

return S_OK;
}


然后我在C#中调用这个函数的时候,报错如下:  “System.Runtime.InteropServices.MarshalDirectiveException”类型的未经处理的异常出现在 mscorlib.dll 中。

其他信息: 封送拆收器限制: 字符串过长。


这是什么原因?怎么处理这个问题啊?各位大牛帮帮忙 c# COM
[解决办法]
引用:
BSTR不是这么操作的吧


*result = new TCHAR[20];
这句错了。

CString s(_T("test"));
*result = s.AllocSysString();

或者:
*result = _bstr_t("test").Detach();

或者:
*result = ::SysAllocString(_T("test"));

热点排行