NI LabVIEW,CVI,数据采集等产品讨论区

取消
显示结果 
搜索替代 
您的意思是: 

(求救)不明白调用LV6.1的CIF时问题出在哪里???


各位同仁:
本人在使用CIF调用DLL时,出现了如下错误:An exception occurred within
the
external code called by a Call Library Node. This may have corrupted LabVIEW's

memory.You should save any work to a new location and restart LabVIEW.
VI "useDll.vi" was stopped at Call Library Function Node 0x214 of
subVI "useDll.vi"。本人用单步执行时,发现参数没有传递进去。对于出现的这个问题,已经
超出了我的能力,希望大家给我指点指点。这里谢过先。

程序见附件
0 项奖励
1 条消息(共 7 条)
6,976 次查看
请提供详细的信息,例如,什么样子的DLL,DLL 需要初始化么?DLL有没有用string, array, etc.
0 项奖励
2 条消息(共 7 条)
6,972 次查看

Joe Guo <x@no.email> wrote:
>请提供详细的信息,例如,什么样子的DLL,DLL 需要初始化么?DLL有没有用string,
array, etc.

谢谢给我答复。
本人使用的DLL很简单:求以输入参数为半径的球的体积和表面积,主程序如下:
#include "stdafx.h"
#include "math.h"
#define M_PI 3.14159

extern "C" __declspec(dllexport) int __cdecl GetSphereSAandVol(double * radius,
double* sa, double* vol);
double GetSA(double radius);
double GetVol(double radius);

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}

__declspec(dllexport) int __cdecl GetSphereSAandVol(double * radius, double*
sa, double* vol)
//Calculate the surface area and volume of a sphere with given radius
{
int i;
for(i=0;i<1;i++)
{
if(radius[i] < 0)
{
return false;
break;
}
*sa++ = GetSA(radius[i]);
*vol++ = GetVol(radius[i]);
}
if(i==1)
return true;
}
double GetSA(double radius)
{
return 4 * M_PI * radius * radius;
}

double GetVol(double radius)
{
return 4.0/3.0 * M_PI * pow(radius, 3.0);
}

在使用CIF调用DLL时,出现了如下错误:An exception occurred within
the external code called by a Call Library Node. This may have corrupted
LabVIEW's
memory.You should save any work to a new location and restart LabVIEW.
VI "useDll.vi" was stopped at Call Library Function Node 0x214 of
subVI "useDll.vi"。本人曾单步执行过,发现参数没有传递进去。对于出现的这个问题,已经
超出了我的能力,望再次给与指点。在这里谢过先。

程序见附件
0 项奖励
3 条消息(共 7 条)
6,970 次查看
这个需要在dll外对数组作初始化
我也遇到过类似的问题,不过是因为数组越界
0 项奖励
4 条消息(共 7 条)
6,968 次查看

whoops <x@no.email> wrote:
>这个需要在dll外对数组作初始化<br>我也遇到过类似的问题,不过是因为数组越界

在程序中已对数组进行了初始化,但是现在有出现了另外一个问题:LV的Run按钮为
断开的状态。单击时,弹出Call Library Function Node:contains unwired or bad
terminal的错误。但是连线时没有提示错误。我隐约觉得是CIF的参数设置处理问题,但
本人能力有限,望给我指点指点。要能给个对输入参数数组,同时输出参数也是数组
的例子,本人将不胜感激。
本人DLL的功能很简单,就是对输入的数组radius[5]采用面的关系求输出:
pradius[i]为前i个radius[j](j<i)数据的累加和,并将其输出。

程序见附件
0 项奖励
5 条消息(共 7 条)
6,968 次查看
用fix sized array 代替指针(pointer) 试一下。

或者试用一下CIN node。这个在application notes 里有详细使用CIN的方法。

-Joe
0 项奖励
6 条消息(共 7 条)
6,962 次查看

Joe Guo <x@no.email> wrote:
>用fix sized array 代替指针(pointer) 试一下。<br><br>或者试用一下CIN node。这个在application
>notes 里有详细使用CIN的方法。<br><br>-Joe

Thanks.
0 项奖励
7 条消息(共 7 条)
6,949 次查看