小弟初学com,现遇到一个问题,想在一个com工程里面定义一个函数,输入参量为数组类型,因为这个com需要在vb下调用。调用的时候给出的参数是一个数组。请各位帮帮忙,如何实现函数的输入参量为数组的问题。最好能告诉我一段代码。我本来是用BSTR类型输入参量的。可是发现不对。
解决方案 »
- SDI里BitBlt复制怎么是窗口下面的图?
- 问一些matlab的问题
- 关于ADO调用其他数据库存储过程的问题
- HOOK WinSock问题,详细代码,请高人指点.
- SkinMagic的简单问题
- 对话框中怎样判断鼠标点击位置是否在一个空间区域内?
- 可以通俗易懂的讲一下这几个名词:“句柄”、“消息”、“资源”吗?初学VC,多多帮助,晚上结帖。
- 又碰到奇怪的问题,我的程序在退出时为何总要响一声??
- 求助,在win32或者mfc下实现录音功能
- 有关MFC的两个宏
- 20,送小分,::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW)),Hand 的标志为多少
- <<Visual c++ 技术内幕>> 买第四版好还是第五版好???
记住一定要typedef
随后接口中就可以使用这个数组或者vector了!
这样跨进程、套间调用会有问题的。可以用但不是标准的做法。
在IDL里面定义好就可以了。
HRESULT Method1 ([in] char chBuf[10]);
还有更高级的用法,如变长的数组等等。
VB
dim var(5)
var(0)=1
....
var(4)=5
....
interface.PutArray(var);
.....
VC
STDMETHODIMP Cinterface::PutArray(VARIANT * var)
{
// TODO: Add your implementation code here
HRESULT hr;
VARIANT varstr;
varstr.vt=VT_BSTR;
long Ucolnum(0),Lcolnum(0);
var->vt=VT_ARRAY|VT_VARIANT;//安全数组
try
{
SafeArrayGetUBound(*var->pparray,1,&Ucolnum);
SafeArrayGetLBound(*var->pparray,1,&Lcolnum);
long rgsabound[2];
for(int i=Lcolnum;i<Ucolnum;i++)
{
rgsabound[0] =i;
rgsabound[1] =0;
hr= SafeArrayGetElement(*var->pparray,
rgsabound, &varstr);
//得到var[i]为varstr
}
}
catch(...)
{
return S_FALSE;
}
return S_OK;}