我现在要编一个DLL供PB调用,有两个函数同名,只是参数稍有不同,请问怎么定义def文件?例如:
long ABC(int intFlag,char* aaa)
long ABC(int intFlag,long* bbb)应该怎么去编这样的dll ?
long ABC(int intFlag,char* aaa)
long ABC(int intFlag,long* bbb)应该怎么去编这样的dll ?
解决方案 »
- 串口通信为什么要执行两次才把数据传送上来
- 用VC的winsock编程,连接成功后,客户端如何得到服务器IP?
- 有关加载Dll的内存占用问题.
- 求一个自己写的button, 不是那种重载drawitem. 也不要用window系统的button, 就是完全自己画出来的button.
- 修改别人代码遇到的问题
- 如何获得位图的高和宽还有位图的flag
- 高分求教:mfc写的控件不能注册的问题?
- 救救我啊各位,我的这个函数修改纪录,却总是更新失败!!
- ······求帮忙········
- 一只菜鸟:如何更改剪切板的内容(请告诉我剪切板中数据的格式)
- 给个意见。。有分加。。。
- ATL中使用ADO连接数据库的问题,在线求助!
__declspec(dllexport)
-------------------------------------
我已经加上了,在def文件中怎么写?
__declspec(dllexport) long long ABC(int intFlag,long* bbb)
不然就要用def文件才行了
如果不用def文件,又不想函数名被改变,必须添加extern "C"
也就是
extern "C" __declspec(dllexport) long long ABC(int intFlag,char* aaa);
不过能不能这样导出重载函数我就不知道了。你试过以后告诉我一下。
否则名字会被C++编译器 强压 页就是换了个新的文字。但是C语言 不支持函数重载的所以 还是换个名字就行了拉。
long DABC(int intFlag,void* aaa,bool bChar);
{
if(bChar)
return ABC(intFlag,(char *)aaa);
else
return ABC(intFlag,(long *)aaa);
}
如果VC不行,有别的语言可以吗?
如果VC不行,有别的语言可以吗?
==========================
这个倒是可以的。
譬如你在VCDLL中导出两个函数
long ABC_char(int intFlag,char* aaa);
long ABC_long(int intFlag,long* bbb);
然后在pb中这样使用
function long ABC( long intFlag, char* aaa) Library 'DLL的名称' alias for ABC_char
function long ABC( long intFlag, long* aaa) Library 'DLL的名称' alias for ABC_long
因为PB是没有指针的,只有引用,但是方法应该是可行的。
譬如
function long ABC( long intFlag, char* aaa) Library 'DLL的名称' alias for ABC_char
应该改为
function long ABC( long intFlag, ref string aaa) Library 'DLL的名称' alias for ABC_char
extern "C" long __stdcall ABC(int intFlag,void* aaa)
然后在函数内部,根据情况对aaa进行 (char*) 和 (long*),分别进行处理。
这样def文件中只有一个函数名ABC,就没有问题了。2、在PB中声明如下:
Function long ABC(long intFlag,ref string aaa) Library 'my.dll' alias for "ABC"
Function long ABC(long intFlag,ref long bbb) Library 'my.dll' alias for "ABC"