关于动态链接库文件调用问题。

sietlkj 2001-09-14 03:50:36
我需要调用一个动态链接库文件,调用源代码如下:
///////装载DLL/////////////
HINSTANCE gLibSample=NULL;
FUNC pl;
gLibSample=LoadLibrary("sample.dll");
if (gLibSample=NULL)
{
MessageBox("未能成功装载dll程序。\n请查找原因!");
return;
};
pl=(FUNC)GetProcAddress(gLibSample,"pl");
//////////装载结束//////////////

double a[10];
int b[10];
float c[10];
BYTE d[21];
////调用
int Result=pl(&a,d[],&b,&c);

编译时出错。出错代码如下:
'int (__cdecl *)(void)' : too many actual parameters。
经过核对,参数数量正确。且此动态链接库文件在VB下调用成功。请问,这是怎么回事?
...全文
147 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sietlkj 2001-09-17
  • 打赏
  • 举报
回复
to protale() :Thanks very much!
sietlkj 2001-09-17
  • 打赏
  • 举报
回复
谢谢各位!已经能够正常运行了!现在正在进行返回结果的验证。
特别多谢protale() 和qqchen79(知秋一叶) ,每人各得10分如何?
我试试能否分别给两位加到20分。
再次谢谢!
sietlkj 2001-09-16
  • 打赏
  • 举报
回复
to Nhsoft(我不是高手) :type int (*func)();
to qqchen79(知秋一叶) :dll是用vc5.0编写的。
多谢你的意见!我先试试,成功后马上给分。
qqchen79 2001-09-15
  • 打赏
  • 举报
回复
你的DLL不是用C或者C++编得吧?
统一起见,DLL的函数最好声明称WINAPI类型的(VB和Delphi的DLL都是如此),上例中FUNC的定义改成:
typedef WINAPI int (*FUNC)();
或者
typedef _stdcall int (*FUNC)();
protale 2001-09-14
  • 打赏
  • 举报
回复
见帖子http://www.csdn.net/expert/topic/278/278112.shtm
tjm 2001-09-14
  • 打赏
  • 举报
回复
dll中函数声名?
潘李亮 2001-09-14
  • 打赏
  • 举报
回复
how define of your FUNC
sietlkj 2001-09-14
  • 打赏
  • 举报
回复
???
已经调试过了。上述问题解决了,但出现了新问题,在执行时出现如下代码:
Debug Error!
Program:F:\test.exe;
Module:
File:i386\chkesp.c
Line:42

The Value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
从字面上看,似乎是我调用的声明与DLL文件声明不一致导致的,是这样的吗?这个问题又该如何解决呢?
CNer 2001-09-14
  • 打赏
  • 举报
回复
调试先,,,

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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