收录日期:2021/02/25 15:29:24 时间:2016/07/24 19:51:26 标签:API 调用
gqjin 于 2010-05-13 12:45:48 编辑 在PB中定义如下外部函数
public function ulong fix(long a,long b,ref string c)  library "myDLL.DLL" alias for "Fix"
public function ulong fix(long a,long b,ref ulong c)  library "myDLL.DLL" alias for "Fix"
注意参数c的类型不同
我再DLL中如何写一个函数Fix(long ,long b,string/long c),让PB能可以根据参数类型不同自动去执行Fix的不同代码,我不想写fix1(long a,long b,ref string c)、fix2(long a,long b,ref long c) 这样2个函数,只想用一个函数来实现,C代码如何写?请各位高手指点!!
顶贴!!
这个得试试才知道
不可以,应在PB中判断调用哪个函数,就是说还是:fix1,fix2。。。。。
VC里面难道不支持函数重载?
同楼上,重载不就完了吗?如果Fix(long ,long b,string/long c)这样也可以的话那重载的定义就要重写了。
4 楼comanche(太可怕)回复于 2002-01-25 05:34:56 得分 8dll   和   com   都不能支持重载   
  关于能不能重载函数只跟编译器有关...     
  具体说明一下,重载的函数在编译时被改名也   FunctionName@XXXXXXNNNN   这样的一个名字(X是字符,   N是数字),   所有的   C++   函数名都被编译器改名成这样的一个名字(每种编译器的名字可能不一样),   而   dll   导出函数只能是   extern   c   的声明,所以不行重载;COM   不是   extern   c,   但COM是必要兼容   idl   语法,   在   idl   语法中没有重载的语言映射(idl   不是MS发明,是由   CORBA   中最先引入,   OMG   有对   idl   到各种语言的映射文件,   也就是白皮书),因为   idl   要对各种语言进行映射,而重载是   c++   专有名词,所以不被支持(要支持可能性也不大).   
  
到底有没有人去试试呀,我的vc水平有限,不过也可以写上两句,实在不行我明天试试看
VC水平有限,帮不上忙了,顶帖
刚才试了:
vc的两个函数
PBTEST_API int __stdcall fix (int a,int b,char* c);
PBTEST_API int __stdcall fix (int a,int b,int c);

int  __stdcall fix(int a,int b,int c)
{
return 0;
}
int  __stdcall fix(int a,int b,char* c)
{
return 1;
}
但是定义导出时必须不同 
fix1 = ?fix@@YGHHHH@Z @14 private
fix2 = ?fix@@YGHHHPAD@Z @15 private

PB:
public function ulong fix1(long a,long b,ref ulong c) library "pbtest.DLL" 
public function ulong fix2(long a,long b,ref string c) library "pbtest.DLL"

ulong ls_a
ulong a,b
ulong c
string d
ls_a = fix1(a,b,ref c)
messagebox('',ls_a)
ls_a = fix2(a,b,ref d)
messagebox('',ls_a)

执行一切顺利

所以你应该考虑在pb里再进行一次封装,使其具有一个接口
xys_777 这样做我之前也试过,是可以的,只是没有在pb里再次封装
这个问题还是没办法解决,不过先结贴

菜鸟问:web application 和web service 有什么区别? 元素的属性问题 我很疑惑 我的控件找不到 求救:请问高手在文件中怎样删除一条指定的记录??? CB的输入框接受阿拉伯语言没问题了,但TListBox好像还是不能正确现实阿拉伯语,有什么办法解决么? web求助,急死了!!! 客户真是无底洞(急,在线等!) new对象数组失败,100分相送 我写了一个控件AA,这个控件需包含4个我写的pas文件,我安装了这个控件,可以不能运行,需要在 有关cookies的问题 问一个关于XML打开的问题. getCodeBase().getHost(); 请问哪儿有CB安装程序下载? PD 中 能否把 PDM 转化为CDM? C++Buider是怎么向 SQL Server中写入数据的?SQL Server已有数据库,并建立了数据表。对数据表数据写入、修改、删除,举个例子。越快越好 中的data怎么理解。。 关于超光速的一个疑问 淡月儿 散分兮 我要在portlet的jsp页面上,加一个超级链接,链接到其它页面,例如新浪的首页。请问如何实现啊? 请问怎么读取BMP文件 一个简单的编译错误? 包头空难事故上《华盛顿邮报》头版了!! ()为啥当函数调用时,引用和指针可以改变实参的值,而默认的传值不能改变实参的值? 关于an2131固件装载问题,分不够再加 Webbrowser控件的应用!特着急!!!!!!!!!!!!! 一个可能是超前世界50年的理论 webservices 安全 VB打包问题! 如何设置div滚动条的宽度?望高手不吝赐教(急) 请问哪里有windows98的镜像文件下载(iso格式)