`
buliedian
  • 浏览: 1193358 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

如何用VC编写供PB调用的DLL (转)

阅读更多
如何用VC编写供PB调用的DLL[转帖]
2008-11-01 12:40
VC PB dll和编写一般的DLL方法相同,
需要注意以下两点:
(1)调用约定C函数有_stdcall、_cdecl、_fastcall等多种调用约定,调用约定用来说明函数参数的压栈顺序和由谁(函数自身还是调用者)来修改堆栈。关于调用约定的详细说明,请参考我转载的另一篇文章。编写供PB调用DLL,请使用_stdcall调用约定,如下所示:
extern "C" _declspec(dllexport) int _stdcall GetInt(char* name)
{
...
}
(2)def文件
在VC 中,如果生成DLL可以不使用.def文件,只需要在VC 的函数定义前加__declspec(dllexport)修饰就可以了。生成的DLL VC 用户可以直接使用,但PB、VB等用户使用会遇到函数名转换的问题。因为VC 对于__declspec(dllexport)声明的函数会进行名称转换,如下面的函数:__declspec(dllexport) int _stdcall GetStr() 编译后会转换为 GetStr@0,这样在PB、VB中声明函数时应该声明GetStr@0,
如果函数带有参数,转换后的函数名将更加复杂,这使PB、VB用户使用起来很不方便。在def文件中由EXPORT输出函数可解决这个问题。
如dll要输出如下两个函数:
extern "C" _declspec(dllexport) int _stdcall GetInt(char* name);
extern "C" _declspec(dllexport) char* _stdcall GetStr(int id);则def文件书写如下(TEST为工程名):
LIBRARY "TEST"
DESCRIPTION 'TEST Windows Dynamic Link Library'EXPORTS
; Explicit exports can go here
GetInt @1
GetStr @2 编译生成DLL后,在PB中要调用GetStr函数,只需做如下声明即可:
function string GetStr(int a) library("TEST.dll"); 注意,如果您建的是Win32 Dynamic-Link Library 工程,def文件需要自己创建,然后把它加入工程,def文件名需和工程名相同。如您的工程名为test,则创建test.def。
//

然后将def加入VS2005,VC6工程中,只要有DEF文件并将其添加到工程中,VC6就可以自动地生成DLL与其相应的Lib文件了。

但是VS2005不一样,需要指定DEF文件

工程 > 属性中的链接器,然后找到"输入"这一项. 在 "模块定义文件" 中输入 testdll.def.

//

在C++ Builder中编写DLL的时候函数如果给外部程序调用应这样声明:
extern "C" __declspec(dllexport) char * __stdcall Test(char * StrTest)
在PB中如果调用这样的DLL文件应这样声明:
FUNCTION String Test(String StrTest) LIBRARY "Test.dll"
如果不需要返回值:
subroutine Test(String StrTest) LIBRARY "Test.dll"
如果要是以函数参数的形式返回在PB中的参数可以这样定义
subroutine Test(ref char StrTest[]) LIBRARY "Test.dll"
FUNCTION关键字一般用于声明WIN32API函数声明
subroutine一般用于调用外部DLL(外部函数一般采用部分函数参数作为返回值的形式)
C++Builde中调用约定有 __fastcall、__pascal、__stdcall、__cdecl 四个关键字
编写DLL与编写其他函数没什么区别,如果要表露出函数给外部程序用应用__stdcall关键字以指定生成的DLL具有兼容性
分享到:
评论

相关推荐

    pb_test_PB与C语言_pb调用dll_

    pb10与vc6开发的dll互相调用实例

    PB调用VC创建的DLL在MIS中的设计与实现1

    PB调用VC创建的DLL在MIS中的设计与实现1

    PB9调用C++的dll实例

    管理系统常用pb开发,少不了外部接口,PB9外部接口调用C++的dll,测试程序。

    pb9调用vc的dll

    pb9调用vc的dll.

    PB调用java组件SatJni

    SatJni是C++编写的动态链接库,实现了C#,PB,Delphi,VB,VC等对Java的调用,能让你很容易地调用成熟的java类库和第三方...示例中演示了PB调用webservice服务(无需代理对象)得到电话号码和天气信息、调用Base64和MD5等。

    pb调用vCdll的摄像程序

    这是pb调用vCdll的摄像程序,内有函数的说明

    PB调用VC创建的DLL在MIS中的设计与实现

    PB调用VC创建的DLL在MIS中的设计与实现 PB调用VC创建的DLL在MIS中的设计与实现

    PB调用VC创建的标注win32 dll 不用注册

    可以执行的dll ,用PB声明是可以执行的,不懂的可以留言。

    PB_调用VC_创建的DLL_在MIS_中的设计与实现.pdf

    PB_调用VC_创建的DLL_在MIS_中的设计与实现

    PB10.5 + VC2008 socket 例程(VC源码,PB源码,socket应用源码)

    VC主要用来通信,封装成DLL,可以任何语言调用.DLL是直接用win32sdk写的,没有用到任何控件。 pb主要是用来显视,VC处理好的数据会存入缓存,同时发一个通知消息给PB取数。

    PB用mymail发关邮件

    PB调用mymail发送邮件,是用VC编写的DLL文件,里面有使用说明

    pb cef3 浏览器控件

    vs2015 + pb11.5 pbni + cef3 81.0.4044.138实现,在PB中调用cef3实现浏览器控件,实现了url加载、重新加载、停止加载、前进、后退等功能; pb12.5可自行升级使用; vs2015生成的dll,需要vc14运行库支持。

    Visual C++中调用DLL实现数据加密

    《共享软件加密算法库》是一款针对个人、企业开发共享软件的加密工具,支持Windows平台下各类开发工具:VC、VB、Delphi、PB、VFP等,算法库集成的算法有:BlowFish、MD5、Secret16、AES、SHA、CRC32、RSA、DES、字符...

    DataMatrix码生成dll库

    DataMatrix生成图片的dll动态库,可供C#、VB、PB、VC等调用。 /*data为原数据,savefile为保存路径(默认bmp格式) ;返回整型,0(生成成功)和-1(生成失败)*/ PB示例: FUNCTION ulong getDataMatrix (string data,...

    验证码识别

    SimPlugOCR.dll为文字识别组件,如果用按键精灵的放在精灵的plugin目录进行调用;VB, VC, Delphi, BCB, PB... 等开发环境可以直接当作COM进行调用;ChLibBuilder.exe为字库建造工具,建造字库供插件进行调用! 1....

    opencv 4.6.0 x86 x64库

    经自己测试,能正常用于vc++(mfc)下tensorflow 2.0 生成的pb文件调用并预测。主要包含include头文件及\opencv2,x64\vc15\lib\opencv_world460.lib opencv_world460d.lib,x64\vc15\bin\opencv_world460.dll opencv_...

    二代证控件及各个语言的实例

     使用调用示例时请将cardapi3.dll、sdtapi.dll、WltRS.dll、license.dat四个文件放在被调用的路径中。  使用C#、VB.net示例时请先根据需要修改输出文件的路径。C#:“项目”->“(项目名称)属性”->“生成”->...

    CP IDMR02 二代证 2013年齐全开发包

    使用调用示例时请将cardapi3.dll、sdtapi.dll、WltRS.dll、license.dat四个文件放在被调用的路径中。 使用C#、VB.net示例时请先根据需要修改输出文件的路径。C#:“项目”->“(项目名称)属性”->“生成”->“输出...

    ClassXP界面库

    ClassXP是一个轻量级的 UI 引擎,应用程序只需要调用一个函数,即可使用 ClassXP 所提供的界面风格

    91OCR文字识别软件 3.6版

    SimPlugOCR.dll为文字识别组件,如果用按键精灵的放在精灵的plugin目录进行调用;VB, VC, Delphi, BCB, PB... 等开发环境可以直接当作COM进行调用;ChLibBuilder.exe为字库建造工具,建造字库供插件进行调用! 介绍...

Global site tag (gtag.js) - Google Analytics