社区
API
帖子详情
关于调用c生成的dll的问题,高手帮忙!
tobephonix
2003-06-14 03:25:55
用c生成了一个dll,dll中定义一个函数encode:
char * __stdcall encode(char *data,int mode),函数返回一个字符指针;
请问在vb里面如何声明并调用这个函数?
...全文
54
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#【必备技能篇】VS2019 使用C/C++
生成
DLL
文件,并用 C/C++、C#
调用
DLL
在C#开发软件的过程中,要经常
调用
C/C++
生成
的
dll
,本文主要介绍用C/C++
生成
dll
的步骤,以及用C/C++、C#两种语言实现
dll
的引用实现。本文使用的IDE是VS2019,文章通过具体实例进行讲解,大家可以跟着自己动手进行测试。
matlab的m文件
生成
dll
,c
调用
matlabR2014a 1.m文件 MyAdd.m function [c] = MyAdd(a, b) c = a + b; end 2.
dll
文件的
生成
mcc -W cpplib:MyAdd -T link:lib MyAdd.m会
生成
下面的文件,MyAdd.
dll
, MyAdd.h,MyAdd.lib三个是用到的 VS2013 1 创建win32控制台
【codeblocks】C
生成
并
调用
DLL
【codeblocks】C
生成
并
调用
DLL
【codeblocks】C
生成
并
调用
DLL
Step1:C程序编写Step2:
生成
DLL
文件Step2.1:新建
DLL
项目Step2.2:编译Step3:C
调用
DLL
Step3.1:新建Win32 GUI 项目以
调用
DLL
Step3.2:配置Step2中
生成
的
DLL
文件参考资料 【codeblocks】C
生成
并
调用
DLL
使用codeblocks用C语言编程
生成
动态链接库(
DLL
),代码主要包含三类函数:入参整型,返回整形;入参浮点,返回指针数组;入参指针数组,返回浮
关于CAPL中Seed2Key
DLL
生成
与
调用
在实际的工程应用中,经常会遇到一些Seed2Key的算法
问题
,而且为了安全保密,这个算法的源码又不想公开,我们可以将其打包成
DLL
,然后在CAPL里面直接
调用
DLL
即可。 1. Seed2Key
DLL
生成
1.1 复制工程模板 Vecory已经提供了
DLL
生成
的工程模板,以Win7系统, CANoe 8.5为例,工程路径如下: C:\Users\Public\Documents\Vector\C...
C语言创建和
调用
dll
动态库
前言 C++在
调用
Dll
中的函数的时候,如果是企业内部的话,肯定是希望三件套的方式(.h\.lib\.
dll
)。这样做的话,编写方可以在头文件中写入很多信息,方便
调用
方的
调用
。但是,一旦是给其他公司的人使用,而不想让别人看到的话,那编写方肯定是不想让别人看到过多的信息的,你只管
调用
。 还有一点是
dll
是在调试的时候使用的,lib是编译的时候使用的,两者是不同时期使用的工具 写这个单纯为了我自己理解 1.创建
dll
首先创建一个空的
DLL
文件,创建方法:新建——项目——Win32控制台程序...
API
1,488
社区成员
23,270
社区内容
发帖
与我相关
我的任务
API
VB API
复制链接
扫一扫
分享
社区描述
VB API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章