调用动态链接库时出现的一个奇怪问题

charlze 2004-10-15 08:20:44
我用delphi写了一个可执行程序,调用VC写的动态链接库时出现了一个奇怪的情况:函数共有四个参数,前三个传递完全正常,可第四个怎么也传递不过去,(第三、四个参数的数据类型完全相同!)在VC中调试时第四个数组的值总显示:CXX0030:Error:expression cannot be evaluated
详细代码如下,请各位大虾帮忙解燃眉之急,谢谢!

delphi部分:
type
TModValue = function(a:PChar; b:integer; c:array of double; d:array of double):integer;stdcall;
var
ModValue: TModValue;
dimArr : array[0..50] of double;
assmDimArr : array[0..50] of double;
appName: PChar;

procedure ...:
handle:=LoadLibrary('AIDLL.dll');
...
@ModValue:= GetProcAddress(Handle,'ModValue');
...
//给appName、dimArr、assmDimArr数组赋值
...
ModValue(appName,2,dimArr,assmDimArr);

VC部分:
ModValue.cpp:
#include "ModValue.h"
int __stdcall ModValue(char* appName,int assemblyIndex,double dimArr[DIM_NUMBER],double assmDimArr[DIM_NUMBER])
{
...
for (int k=0;k<DIM_NUMBER;k++)
{
if (assmDimArr[k]>0.00001) //在这一步出现内存访问错误!
...
}
...
}

ModValue.h:
#define DIM_NUMBER 50
int __stdcall ModValue(char* appName,int assemblyIndex,double dimArr[DIM_NUMBER],double assmDimArr[DIM_NUMBER]);

ModValue.def:
EXPORTS
ModValue
...全文
104 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
charlze 2004-10-17
  • 打赏
  • 举报
回复
感谢beyondtkl兄指点,问题已解决!
beyondtkl 2004-10-15
  • 打赏
  • 举报
回复
t __stdcall ModValue(char* appName,int assemblyIndex,double dimArr[DIM_NUMBER],double assmDimArr[DIM_NUMBER])

// 是这样的 你的 声明 不对

TModValue = function(a:PChar; b:integer; c:array of double; d:array of double):integer;stdcall;
-> VC那边已经确定维数为50 所以你1.在DELPHI定义的数组维数必须也为50 2.具体调用时数组维数也为50.
你可以这样
type ArrayType = array[0..50] of double; // 你试试看。
TModValue = function(a:PChar; b:integer; c:array of double; d:array of double):integer;stdcall;
->
TModValue = function(a:PChar; b:integer; c:ArrayType ; d:ArrayType):integer;stdcall;
ghchen 2004-10-15
  • 打赏
  • 举报
回复
up
wycg_cnh20 2004-10-15
  • 打赏
  • 举报
回复
gz
相关推荐
发帖
Windows SDK/API

1177

社区成员

Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
帖子事件
创建了帖子
2004-10-15 08:20
社区公告
暂无公告