【发布时间】:2013-03-19 11:54:24
【问题描述】:
我尝试通过 com 互操作将数组从 c# 发送到 c++。
这里是c#代码
public void SendArraytoCPlusPlus()
{
GGXForVBA.GeoAtlas GA = new GGXForVBA.GeoAtlas();
string[] arr = new string[3];
arr[0] = "One";
arr[1] = "Two";
arr[2] = "Five";
GA.GetArrayVar(arr);
}
这里是c++代码
void GeoAtlas::GetArrayVar(VARIANT& arr)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
SAFEARRAY* pSafeArray = arr.parray;
long lStartBound = 0;
long lEndBound = 0;
SafeArrayGetLBound(pSafeArray,1,&lStartBound);
SafeArrayGetUBound(pSafeArray,1,&lEndBound);
LPCSTR * arrayAccess = NULL;
SafeArrayAccessData( pSafeArray , (void**)&arrayAccess);
for(int iIndex = lStartBound; iIndex <= lEndBound; iIndex ++)
{
LPCTSTR myString = (LPCTSTR)arrayAccess[iIndex];
AfxMessageBox(myString);
}
}
这是idl
[id(23)] void GetArrayVar(VARIANT arr);
问题是,消息框只显示字符串的第一个字母,即''O'。 'T','F'。我想阅读整个字符串。有什么建议吗?
【问题讨论】:
-
您的应用是使用 Unicode 还是多字节字符集构建的?
-
c++ 是用 MBCS 构建的