C语言的DLL怎么给VB返回String(char*)呢
来源:互联网 发布:博时淘金大数据100 编辑:程序博客网 时间:2024/06/03 20:36
这个问题很少有资料可以搜索得到,主要是因为现在的程序员要么是C/C++,要么VB(.NET),
即有一种钟爱的语言.跟罗sir交流了一下,罗sir是C#骨灰级玩家,专攻网络开发,他认为DLL
加载到exe里成为一个模块,不能对上一级的变量赋值.
除了我这种患有代码痴迷症的人,不会有人去研究这个问题了,经过几天研究,发现了一些
窍门,最近又遇上用它的地方,所以干脆发达这里来,希望对大家有所帮助:
先介绍一个API,(Windows API主要是C语言的代码):
GetWindowText
GetWindowText(Byval hwnd As Long,Byval lpTitle As String,Byval sz As Long)
函数会把对应窗口的标题(文本)赋值给lpTitle,也就是说DLL是可以操作exe的变量的,DLL
属于exe就应当有exe赋予权利,娶个老婆回家,饭不给吃,钱不给用,所有东西不能动,这是哪家
哲学?好,我们现在来自己搞一个API,来给VB返回一个字符串:
.Code
在.Def文件中添加这个函数名(前面有过VB,VC混合编程第一步的介绍),然后VB里面这样引用(这里最关键):
[Private/Public] Declare Function GetFileName Lib "XXX.DLL" (Byval lpString As String,Byval lpResult As String, _
Byval lngCount As String) As Long
然后就是缓冲区,底层开发除了要面对 [蓝屏] 就是 [崩溃],没有给变量缓冲区可能造成内存不能为Read的错误
Dim s As String,ss As String * 256
Rem 如果上面没有定长可以用 ss = space(256) 或者 ss = String(...)
s = "C:/windows/system32/shell32.dll"
Dim l As Long
l = GetFileName(s,ss,256)
ss = left(ss,l)
一个山寨版的 GetWindowText 就是这样了
关于//可能还有人问,前面有关于正则表达式的文章,看下就Okay了,就当前的问题,几个小地方要注意
VB跟C#累似(应该说C# 是vb和C/C++中走来),消去了指针,不要尝试给VB返回任何指针,VB可以用
AddressOf给一个API过程传递地址
VB的String和Byte数组是一个性质,API其实怎么声明无所谓,变量名本身是为了引用,传递的只是数
据类型
返回k的意义:
VB如果用space开辟缓冲区,trim了也就无所谓了,但是C/C++不同,就算你给下个元素赋值为NULL
字符串结束了,但是fwrite等函数还是会把整个数组搞进文件,所以返回k来确定字符窜的长度是很有
必要的
- C语言的DLL怎么给VB返回String(char*)呢
- VC编写的DLL如何给VB返回字符串
- C语言 数组char a[4] 保存了一个数据,怎么转换为unsigned int呢 ?
- c语言中char的-128是怎么计算的
- VB等语言与C++DLL的通讯
- C语言字符串string(char)的操作函数
- c#调用c语言dll,形参有char*
- C 语言包含的数据类型如下图所示: 一、数据类型与“模子” short、int、long、char、float、double 这六个关键字代表C 语言里的六种基本数据类型。 怎么去理解它们呢? 举个
- delphi中怎么调用vb的DLL
- Delphi中怎么调用vb的DLL
- VB调用VC dll的返回方式
- VB调用VC dll的返回
- java 调c写的dll 指针参数返回问题 char* PointerByReference创建 Pointer
- c语言怎么调用dll文件
- 旋转矩阵是怎么回事呢??用C语言怎么实现——彩票相关的
- 怎么发布使用了dll的Activex呢?
- 怎么查看dll文件里面的信息呢
- 【C\C++】char[] 与 string 的转换
- 使用Derby工具和启动辅助程序
- 手动设置Derby的CLASSPATH环境变量
- 运行derbyrun.jar文件的句法
- 设置Derby环境变量
- 记忆中的计算机-8 (DELL Pentium III 和 Sun Sparc 工作站)
- C语言的DLL怎么给VB返回String(char*)呢
- msn在线交流代码
- What I Have Lived For
- ASP.NET中删除Cookie
- 使用S3C2440开发板遇到的一些问题
- 100321 ~ 100328
- PHP下解析xml数据转换成二维数组
- 从WPF想开去
- 60个电子工程师必备网站 --兴趣联盟 - 软件技术交流 yuwd2008xda