函数指针的调用??

liubocy 2005-06-14 10:07:01
在dll中碰到这样个函数指针:
int (*GetCardNumber)(int ComNumber,int* CardNumber) ;
不知怎样声明和调用它?
...全文
288 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
mynamelj 2005-07-16
  • 打赏
  • 举报
回复
这是C++ 中的显式加载dll的调用方法!
liubocy 2005-06-22
  • 打赏
  • 举报
回复
学识尚浅,还是不知道解决异常退出问题


我再顶
1234,2234,3234......
liubocy 2005-06-21
  • 打赏
  • 举报
回复
--------------------------
用c再打包一次
--------------------------

没有办法,我是拿着别的公司给的dll做二次开发。他们只提供dll中的函数原型。
这次应我要求,他们发来补充功能的一个dll,里面倒没用到函数指针,所以很快实现了调用。
难道pb里不能用像这种函数指针做的dll?
还是我写的如下面的声明有问题?
--------------------------

int (*GetCardNumber)(int ComNumber,int* CardNumber)
我试着按平常调dll中函数的方法来做(s_cardnumber为结构):
FUNCTION INT GetCardNumber(int ComNumber,s_CardNumber s_cardnumber) Library "DllName.DLL"

--------------------------


纸飞机2017 2005-06-21
  • 打赏
  • 举报
回复
我测试了一下,用指针变量每次未执行函数体程序就已经挂了,可能是我写错了,对你的问题无能为力,看来是要多学习。

测试方法:
// TestDll.cpp : Defines the entry point for the DLL application.

#include "stdafx.h"

int (__stdcall *GetCardNumber)(int ComNumber,int* CardNumber);
int __stdcall f_test(int ComNumber,int* CardNumber)
{
//简单的实现了一下函数体。
::MessageBox(NULL,"Text","Caption",MB_OK);
int n = ComNumber + *CardNumber;
return n;
}

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
GetCardNumber = f_test;
return TRUE;
}
用Dependency打开生成的DLL里面确实存在GetCardNumber,看来函数指针是可以导出的。

----------------------------------------------
PB声明调用
Function long f_test(long ComNumber,ref long CardNumber) library "testdll.dll"
Function long GetCardNumber(long ComNumber,ref long CardNumber) library "testdll.dll"

long ll_ret,ll_CardNumber
ll_CardNumber = 20
ll_ret = f_test(10,ll_CardNumber);
ll_ret = GetCardNumber(10,ll_CardNumber);

MessageBox("",string(ll_ret))

f_test函数执行正常,执行GetCardNumber立即死亡。
----------------------------------------------

既然你的函数功能能够实现,看来PB异常退出的问题是可以解决的,多翻翻资料看看。

li_d_s 2005-06-20
  • 打赏
  • 举报
回复
用c再打包一次
liubocy 2005-06-20
  • 打赏
  • 举报
回复
自己顶起
liubocy 2005-06-15
  • 打赏
  • 举报
回复
这个dll是用C来做的,里面用函数指针的情况很多。
至于dll能不能Export函数指针,这个不大清楚。

我试着按平常调dll中函数的方法来做:
FUNCTION INT GetCardNumber(int ComNumber,s_CardNumber s_cardnumber) Library "DllName.DLL"

函数的功能能够实现,但每次pb都会异常关闭。
我是在pb8的环境下做的,现在就是希望能解决这个异常关闭的问题
  • 打赏
  • 举报
回复
up
luotitan 2005-06-14
  • 打赏
  • 举报
回复
同意楼上的

比如在dotnet里面用delegate实现函数指针,目的是为了达到事件动态加载的效果。PB里面应该是不能直接这样申明的。
j9dai 2005-06-14
  • 打赏
  • 举报
回复
参数指针用Ref
函数名也是指针?没碰到过,关注
j9dai 2005-06-14
  • 打赏
  • 举报
回复
关注 + 友情UP
纸飞机2017 2005-06-14
  • 打赏
  • 举报
回复
函数指针也就是个变量,并不是函数,怎么能声明调用。
在DLL中也没法Export这个函数指针。
你要搞清楚的是这个函数指针所指向的函数。
--------
int (*ReadCard)(int ComNumber, BYTE*, BYTE*))
形参可以不要指定变量名,只要指出数据类型即可。
liubocy 2005-06-14
  • 打赏
  • 举报
回复
还有这个函数:

------------------
int (*ReadCard)(int ComNumber, BYTE*, BYTE*))
------------------

它后面的两个参数是什么意思?

680

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder API 调用
社区管理员
  • API 调用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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