社区
API
帖子详情
关于调用c生成的dll的问题,高手帮忙!
tobephonix
2003-06-14 03:25:55
用c生成了一个dll,dll中定义一个函数encode:
char * __stdcall encode(char *data,int mode),函数返回一个字符指针;
请问在vb里面如何声明并调用这个函数?
...全文
16
7
打赏
收藏
关于调用c生成的dll的问题,高手帮忙!
用c生成了一个dll,dll中定义一个函数encode: char * __stdcall encode(char *data,int mode),函数返回一个字符指针; 请问在vb里面如何声明并调用这个函数?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dimtxw
2003-06-15
打赏
举报
回复
Private Declare Function encode Lib "upcBarcode.dll" (data As Byte, ByVal nMode As Long) As String
把 strBarCharaters 转为字节数组,调用时数组的第一个元素作为参数。
记得数组最后一个元素为0。
putongren
2003-06-15
打赏
举报
回复
如果用过普通的API调用就知道,与API打交道时你只能将一个字符串缓冲区的指针作为参数送进去,具体原因比较麻烦。所以简单的做法就是在Dll的参数中定义一个字符串,通过Byval将指针传进去(VB就是这么定义的),当然还要传送一个缓冲区的尺寸进去,在Dll内部将结果字符串填到缓冲区中,注意要按ANSI格式填写,不能填成Unicode——一般不会。
tobephonix
2003-06-14
打赏
举报
回复
问题函数encode的返回值类型上,当把encode的返回值类型改成int型,声明做同样的调整后,可以运行!
请问怎样接收从c函数中返回的字符串?
tobephonix
2003-06-14
打赏
举报
回复
to rainstormmaster(rainstormmaster) :试过了,一样的错误;为了方便调试,encode函数没有做任何事,直接返回一个字符串。
rainstormmaster
2003-06-14
打赏
举报
回复
Private Declare Function encode Lib "upcBarcode.dll" (data As String, ByVal nMode As Long) As String
试试
tobephonix
2003-06-14
打赏
举报
回复
我在程序中声明如下:
Private Declare Function encode Lib "upcBarcode.dll" (ByVal data As String, ByVal nMode As Long) As String
然后调用:
Dim strBarCharaters As String
strBarCharaters = encode("54256356985", 0)
运行时报应用程序错误,大致意思是:指令引用某内存,而该内存不能读。
------------------------------------------------------
请问是什么问题?
rainstormmaster
2003-06-14
打赏
举报
回复
怎样把VC++代码转换成VB代码
对于大多数VB的爱好者来说,在很多情况下都想通过使用API函数来实现一些比较高级的功能或达到某种特殊效果,这就需要用到一些VC++的代码.
本文就如何把VC++代码转换成VB代码给出了一些策略和方法.
1.定义常量
我们首先看第一个例子:
#define STD_COPY 1//COMMCTRL.H
在VC++代码中用#define定义常量,而在VB中是用Const来定义,因此转换成VB的代码是:
Public Const STD_COPY=1
第二个例子:
#define LB_SELECTSTRING0x018C //WINUSER.h
这有一个问题,VC++中所有以"0x"开头的值是十六进制,而在VB中表示十六进制要用"&H"开头.因此转换成VB的代码为:
Const LB_SELECTSTRING = 0x018C
第三个例子:
#define TCN_FIRST(0U-550U)
这里有个特别的是定义的值是以"U"结尾,这是意味着该常量的类型是"unsigned long"(在VB中不支持 该数据类型).但是unsigned long和signed long(在VB中是Long)两种数据类型的值在存储方式上是一样 的,只是表现的形式不同.因此,我们只需要去掉末尾的"U"就可以了.
Const TCN_FIRST=(0-550) 这同样适合以"L"结尾的值
另外,对于 #define CDDS_ITEMPOSTERASE(CDDS_ITEM | CDDS_POSTERASE),我们需要用"Or"来取代"|"
2.结构的定义
我们先看VC++定义的一个比较简单的结构:
typedef struct tagTBSAVEPARAMSA{
HKEY hkr;
LPCSTR pszSubKey;
LPCSTR pszValueName;
}TBSAVEPARAMSA,FAR* LPTBSAVEPARAMSA;
首先我们需要把第一行的"typedef struct"转换成"Public Type"
Public Type tagTBSAVEPARAMSA
然后处理结构成员,
HKEY hkr;
LPCSTR pszSubKey;
LPCSTR pszValueName;
对于第一个成员类型HKEY.我们要知道VC++中的以"H"开头的大部分数据类型代表的是某种句柄.在VB中每一个Form对象和许多控件都有一个hWnd属性,它代表所属窗口的句柄.hWnd的类型是Long,并且所有用来存储句柄的变量类型都是Long.因此,该成员在VB中定义为:
hkr As Long
同样的,VC++数据类型LPSTR和LPCSTR代表指向字符串的指针,在VB中可以当作String类型.因为当你传送结构给API时,VB将把结构中所有的String转换成指向ANSI字符串的指针.因此后两个成员在VB中表示为:
pszSubKey As String
pszValueName As String
对于最后一行"}TBSAVEPARAMSA,FAR* LPTBSAVEPARAMSA;"我们只需要用"End Type"取代 就可以了.转换成VB代码后完整的结构为:
Public Type tagTBSAVEPARAMSA
hkr As Long
pszSubKey As String
pszValueName As String
End Type
以下是VC++中数据类型对应到VB中的数据类型VC++数据类型VB数据类型
------------------------------------
short Integer
intLong
long Long
UNIT Long
ULONG Long
WORD,DWORD Long
WPARAM,LPARAM Long
WMSG,UMSGLong
HRESULT Long
BOOL Boolean
COLORREF Long
HWND,HDC,HBRUSH,HKEY,等等. Long
LPSTR,LPCSTRString
LPWSTR,OLECHAR,BSTR String
LPTSTRString
VARIANT_BOOLBoolean
unsigned char Byte
BYTE Byte
VARIANT Variant
(任何以*或**结尾的数据类型)Long
3.函数的转换
我们知道VB提供了API Viewer add-in,但是有很多API函数它并没有包括在内. 因此知道如何把VC++函数转换成VB的函数格式是非常重要的.先看第一个例子:
WINCOMMCTRLAPI HWND WINAPI
CreateStatusWindowsA(LONG style,
LPCSTR lpszTest,HWND hwndParent,UINT wID);
这个函数创建一个StatusBar控件.从WINCOMMCTRLAPI可以得知该函数来自动态 链接库ComCtl32.dll.(有时,我们需要从MSDN中查找某函数对应的DLL) 然后我们知道该函数的返回类型是HWND,对应VB的类型是Long.最后,根据前面提到 类型对应表,很容易的转换相应的函数参数.
Public Declare Function CreateStatusWindowA Lib
"ComCtl32.dll" _
(Byval style As Long, _
Byval lpszText As String, _
Byval hwndParent As Long,Byval wID As Long) As Long
转载自计算机世界日报 (文/刘锋)
C#程序实现动态
调用
DLL
的研究(转载)
C#程序实现动态
调用
DLL
的研究 摘要:在《csdn开发
高手
》2004年第03期中的《化功大法将
DLL
嵌入EXE》一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资源中释放出来,...
C#程序实现动态
调用
DLL
的研究
摘 要:在《csdn开发
高手
》2004年第03期中的《化功大法——将
DLL
嵌入EXE》一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资源中释放出来,通过静态加载延迟实现DLL...
Java
调用
Dll
参考文章:http://blog.csdn.net/gcangle/article/details/8504629一、
生成
dll
文件 不会写C代码的同学,建议下一个Dev-cpp来练手,新建一个
Dll
项目,将其中的.cpp文件和.h文件内容改成以下代码: ①main.h 改写成#...
我在CSDN参与的3000个帖子
2:100分急求,随机输出十个小写字母,但是,要求这十个字母不相同 3:求Sn=a+aa+aaa+…+aaa…a(n个a)之值 4:数组题 望
高手
帮忙
! 5:呵呵,来推荐一下我的网站,本站提供大量当今流行的免费的音乐和免费电影,...
c++ 访问 使用openssl
生成
证书的java服务的总结
最近一直在研究C++访问java写的https的网站的程序,由于本人对证书的知识知道比较少,进展的特别慢,其中也查了不少资料关于证书的。证书类型这里写从别人的blog里摘的地址没记住转一点了。 PKCS 全称是 ...
API
1,486
社区成员
23,279
社区内容
发帖
与我相关
我的任务
API
VB API
复制链接
扫一扫
分享
社区描述
VB API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章