vc调用MatrixVB问题

beifangqq 2010-01-12 11:54:33
#import"…………/MMatrix.dll"之后在一个按钮相应函数里面建立了safearray然后调用如下
MMatrix::_MatrixPtr mm;
MMatrix::_MlibPtr aa;
try
{
aa->magic(&arrayPtr);
}
catch(_com_error *e)
{
MessageBox( e->ErrorMessage());
}
编译通过,但是运行时候内存调用出错,那位大侠有相关经验
不要告诉我在vb里面调用,我想在vc里面调用,


arrayPtr是这样建立的
SAFEARRAY* arrayPtr;
...全文
65 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
beifangqq 2010-01-12
  • 打赏
  • 举报
回复
magic函数在MMatrix.tli中的部分
inline _variant_t _Mlib::magic ( SAFEARRAY * * vv ) {
VARIANT _result;
VariantInit(&_result);
HRESULT _hr = raw_magic(vv, &_result);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return _variant_t(_result, false);
}
beifangqq 2010-01-12
  • 打赏
  • 举报
回复
magic函数在MMatrix.tlh中的声明
_variant_t magic (
SAFEARRAY * * vv );
beifangqq 2010-01-12
  • 打赏
  • 举报
回复
这是按钮响应函数里面的全部代码,有问题的只有一句aa->magic(&arrayPtr);
void CdlltestDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
SAFEARRAY* arrayPtr;
HRESULT hresult;
LONG l=0;
LONG buf=5;
arrayPtr=SafeArrayCreateVector(VT_I4,0,1);
if(arrayPtr == NULL)
{
hresult = ResultFromScode(E_OUTOFMEMORY);
MessageBox(_T("创建safearray失败"));
}
hresult=SafeArrayPutElement(arrayPtr,&l,(LONG*)&buf);
switch (hresult)
{
case S_OK:MessageBox(_T("创建成功"));
break;
case DISP_E_BADINDEX:MessageBox(_T("The specified index was invalid"));
break;
case E_INVALIDARG:MessageBox(_T("One of the arguments is invalid."));
break;
case E_OUTOFMEMORY:MessageBox(_T("Memory could not be allocated for the element"));
break;
}
MMatrix::_MatrixPtr mm;
MMatrix::_MlibPtr aa;
try
{
aa->magic(&arrayPtr);
}
catch(_com_error *e)
{
MessageBox( e->ErrorMessage());
}
SafeArrayDestroy(arrayPtr);
}
jackson35296 2010-01-12
  • 打赏
  • 举报
回复

CoInitialize(NULL);

MMatrix::_MatrixPtr mm;
MMatrix::_MlibPtr aa;

CLSID idCom,idMlib;
hresult = CLSIDFromString( L"{053e1110-0de2-11d3-b81b-10c48bcb0000}", &idCom );
if ( FAILED(hresult) )
{
return;
}
hresult = CLSIDFromString( L"{984396b2-8d76-11d3-b81d-00c04f2ac5eb}", &idMlib );
if ( FAILED(hresult) )
{
return;
}
hresult = ::CoCreateInstance( idCom, NULL, CLSCTX_INPROC_SERVER, idMlib, (LPVOID*)&aa);
if ( FAILED(hresult) )
{
return;
}
try
{
aa->magic(&arrayPtr);
}
catch(_com_error *e)
{
MessageBox( e->ErrorMessage());
}
SafeArrayDestroy(arrayPtr);
CoUninitialize();

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧