C++写的DLL,传结构给VB用
来源:互联网 发布:淘宝买的8lag怎么用 编辑:程序博客网 时间:2024/06/05 00:38
由于某些情况下,我们需要用CB或是VC写一个DLL,而调用它的确实VB。
这里特别强调一下使用标准数据类型的问题,就是说用C++写的东西,导出的函数最好使用标准的int,char,long,double...标准类型以及他们的指针。
很多人都强调过这个问题。但是我最近遇到一个需要VB传结构给CB做的DLL,然后数据返回到结构的情况。
typedef struct Xtest
{
char a[100];
char b[100];
}*pX;
__declspec(dllexport) void __stdcall test (*px,char *x,char *y);
void __stdcall test (*px,char *x,char *y)
{
if(strlen(x)>100) *(x+99)='/0';
if(strlen(y)>100)*(y+99)='/0';
strcpy(px->a,x);
strcpy(px->b,y);
return;
}
在VB里你要写一个同样的结构
public type Xtest
a as string*100
b as string*100
end type
public declare funciton test lib"你的DLL名字" (byref px as Xtest,byval x,byval y)
这样才可以成功,如果使用了不定长的字符串,那么很可能你的系统要崩溃,我在我这里是这样。如果有问题,请大家指正。
另外,VB声明DLL里的函数,需要DLL的名字放在 LIB后面,但是这个名字在运行时,你必须要写全路径或是放在SYSTEM32目录,即使放在VB程序所在的目录,也需要全路径。但是编译过的VB程序,可以识别放在同目录下在声明里没有写全路径的DLL。
这样的结构,看起来是很不错的做法,但是对于cb/delphi,我认为用String类型就好。当我们需要传出非标类型的时候,把需要传入/传出的数据,用结构封装起来,这样就可以避免写参数N多的函数,只要定义一个机构就可以了。然后在结构里,我们使用一个类型标志来确定我们需要提取的参数。
public type Xtest
Para as String
a as String
b as String
...
end type
function test(v as Xtest)
if para="100" then
你的操作
end if
if para="200" then
...
end if
end function
这样的方式可以让我们在一个函数里处理N多的事情。只要根据不同的标志就可以确定我们做的操作。
很明显这种做法,就是我们通常所谓的协议实现。无论是银联的8583,还是RS232C,都是一种约定和规范。我们在编程的时候,适当的制定一些简单的规范,对我们批量处理是非常有好处的。而且最后的风状效果也是很不错的。
使用类做这样的事情当然是很不错的事情,但我们通常不建议直接使用导出类。而是使用接口,以免出现某些数据安全性方面的问题,因为你一但导出一个类,那么通过指针的简单操作,很容易从类的实例当中获取数据。所以,接口编程就比较重要了。
- C++写的DLL,传结构给VB用
- [VB.NET]vb.net 调用c写的dll问题
- 用 VC 写 CRC32 DLL 给VB调用
- java 用jacob 调用vb写的dll
- java 用jacob 调用vb写的dll
- vb调用C#写的dll
- VB.NET写的DLL调用问题
- vb调用C#写的dll
- vb 调用delphi写的dll
- vb调用C#写的dll
- C语言的DLL怎么给VB返回String(char*)呢
- C#传递结构体地址(或者结构体成员的地址)给C/C++ DLL
- 用VC写DLL给PB调用
- C# 中引用vb编写的DLL
- vb下调用C++dll的方法
- C入门:用C写简单的DLL
- 用VC开发API形式的DLL给VB调用的范例
- 用VC开发API形式的DLL给VB调用的范例
- Report Service相关
- 我的第一篇文章:Symbian中同步socket用法
- 解决ms serer 2000 最大流水号问题
- 买DC与软件需求
- 在数据架构规划前进行XML消息的设计,增加Web服务的互操作性
- C++写的DLL,传结构给VB用
- ANSI 与 UNICODE 的区别。(转)
- 又出差了
- 操作系统实验_利用银行家算法避免死锁
- 在Delphi中实现类型安全的容器,Delphi泛型库DGL引介(提供源码下载)
- Delphi泛型库DGL中的接口的声明
- 芙蓉姐姐语录
- ArrayList转换String[]
- 关于DNS的一些基础知识