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

怎么声明dll中的mxArray数据类型

2012-12-14 
如何声明dll中的mxArray数据类型请各位大虾帮一下忙,现在我用matlab写了一段程序,用VC生成了DLL文件,在VB

如何声明dll中的mxArray数据类型
请各位大虾帮一下忙,现在我用matlab写了一段程序,用VC生成了DLL文件,在VB中调用老是提示:“DLL调用约定错误”
matlab程序:function Untitled2(radius,area)
            area=pi*radius^2;
VC程序:void mlfUntitled2(mxArray * radius, mxArray * area) {
              mlfEnterNewContext(0, 2, radius, area);
              Muntitled2(radius, area);
              mlfRestorePreviousContext(0, 2, radius, area);
               }这只是一部分;
VB程序:Private Declare Function mlfUntitled2 Lib "untitled.dll" (ByRef a As Double, ByRef b As Double)

Private Sub Command1_Click()
    Dim i As Double, j As Double
    Dim p
    
    i = 2.5
    
    p = mlfUntitled2(i, j)
    
    Text1.Text = j
    
End Sub

请问是哪里的原因引起的呢?先在这里谢谢各位大虾了!!!
[解决办法]
显式声明vc dll 导出函数调用约定为:__stdcall
[解决办法]
能说的更详细些吗?我不是很明白!谢谢!
[解决办法]
void __stdcall mlfUntitled2(mxArray * radius, mxArray * area) {
    mlfEnterNewContext(0, 2, radius, area);
    Muntitled2(radius, area);
    mlfRestorePreviousContext(0, 2, radius, area);
}
这样吗?
但是提示:e:\devise\vc\untitled\untitled2.c(26) : error C2373: 'mlfUntitled2' : redefinition; different type modifiers
        e:\devise\vc\untitled\untitled2.h(28) : see declaration of 'mlfUntitled2'
untitled.c
执行 cl.exe 时出错.
[解决办法]
void 就是没有返回值,VB 中应该声明为 Sub 而不是 Function,你的函数声明需要返回一个 Vairant 值。
[解决办法]
double _stdcall mlfData(double *x) 

{

    int nargout = 1;
double *out;
    mxArray *y;
mxArray *a;

a = mlfScalar((double)*x);

    mlfEnterNewContext(0, 1, a);
    y = Mdata(nargout, a);
    mlfRestorePreviousContext(0, 1, a);

out = mxGetPr(y); //c获得结果的实部,即结果
mxDestroyArray(a); //释放空间
mxDestroyArray(y); //释放空间
    //return mlfReturnValue(y);
return (*out);
}
现在我的*x是指向数组的指针变量,*out是返回计算后的指针变量(数组),请问怎么样才能返回数组了!
[解决办法]
不能直接返回一个数组,外部调用者没有足够的信息对该数组进行安全地释放。
参考 API 函数 GetWindowText,数组由调用者创建(也由调用者负责释放),函数只是往该数组中写数据。通过指示数组长度的参数,还可以避免产生缓冲区溢出的问题。

热点排行