pb可视化用户控件能生成dll吗

pb可视化用户控件能生成dll吗,第1张

fatalogId=63364&eliteId=63364_10a6fcc27670cd4),但有两点不清要澄清。编译成ole控件调用就可以调用, 用ConnectToNewObject()这个函数

一、首先用pb生成dll,步骤如下:

1新建一个COM/MTS控件(名称:n_test),一路next即可

2完成后会生成一个project和一个不可视对象。

3在n_test内写一个函数:f_change,返回值为long,参数al_a(long),代码如下: if al_a = 1 then return 1 else return 0 end if。要澄清的是必须在n_test内定义,而不要把函数定义为全局的。

4在工程的的属性project窗口中,其中object页的Program ID(这里是PB80n_test)就是我们要连的对象名

5生成dll,就是deploy 。要澄清的是生成时应同时注册控件,否则就要用regsvr32注册了testdll。

二、调用dll

1声明:Function Long f_change(Long al_a) LIBRARY "testdll"

2调用,代码如下:

oleobject lole_1

lole_1=create oleobject

lole_1connecttonewobject("PB80n_test") //PB80n_test为dll的Program ID int

lint_1,lint_2 lint_2 = 1 lint_1=lole_1f_change(lint_2)

messagebox("returnvalue",string(lint_1))

lole_1disconnectobject( )

destroy lole_1

3运行,当传入1时,返回1,传入其他数字时,返回0。

和编写一般的DLL方法相同,需要注意以下两点:

(1)调用约定

编写供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 hereGetInt @1GetStr @2编译生成DLL后,在PB中要调用GetStr函数,只需做如下声明即可:

注意,如果您建的是Win32 Dynamic-Link Library 工程,def文件需要自己创建,然后把它加入工程,def文件名需和工程名相同。如您的工程名为test,则创建testdef。

以上就是关于pb可视化用户控件能生成dll吗全部的内容,包括:pb可视化用户控件能生成dll吗、如何用vc编写供pb调用的dll、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10082141.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存