VB传入回调函数指针至VC编写的DLL函数中,应注意的几点

VB.NET 如何调用VB.NET 写的DLL类库-实例 首先新建一个class,其生成的dll文件被另一个工程以“引用”(project - add reference - Browse )的方法调用。 1.类的代码:根据一个字符串,返回其长度Public Class Class1    Public strinpara As String    Public Function GetLength()        Dim a As 阅读详情

http://www.china-askpro.com/msg13/qa91.shtml

http://support.microsoft.com/kb/q181578/

VB中,应注意以下几点:

  • 声明DLL函数时,有返回值的声明为Function,无返回值声明为Sub,参数类型要一一对应,注意参数类型的字节数;
  • 注意AddressOf运算符用法;

VC中,应注意以下几点:

  • DLL输出函数应声明成“__stdcall”
  • 声明回调函数指针时,注意“__stdcall”声明,示例:
    VB:Sub ShowData(ByVal nData As Long)
    VC:typedef VOID (__stdcall *FunPtr_VBCallback)(INT32)
    因为这一点,VC函数调用该回调函数之后,VB IDE老是崩溃

 

vc写dll,我只会写int类型的函数:

__stdcall int CALLBACK CalcSum(int a,int b);

vb中可以声明:
Private declare Function MySum Lib "d:MyDLL.dll" (ByVal S As Integer, ByVal D As Integer) As Integer


这样就可以在vb中使用了,可是我现在想在dll中写一个能够返回字符串的函数,并用vb的label控件把函数返回的字符串显示出来,请问dll里怎么写?vb里怎么声明?label控件怎么调用它?如能解决,立即给分,恳请大家帮帮忙!


回复1:
__stdcall int CALLBACK CalcSum(int a,int b,char *c);

vb中可以声明:
Private declare Function MySum Lib "d:MyDLL.dll" (ByVal S As Integer, ByVal D As Integer, ByRef c as string) As Integer

回复2:
BSTR/VARANT

回复3:
用BSTR

CString::AllocSysString
BSTR AllocSysString ( ) const;
throw( CMemoryException );

Return Value

Points to the newly allocated string.


或者
SysAllocString
BSTR SysAllocString(
OLEchar FAR* sz
);



回复4:
__stdcall char * CALLBACK CalcSum(int a,int b);

在vb中定义函数的返回值就字符串类型或者字符指针就可以了。。。

回复5:
vc寫dll,vb 調用,有趣。

回复6:
BSTR, RETVAL, ByRef

回复7:
试试:
VB中String转换为VC中的BSTR,只要把参数类型改了就可以了,但要注意使用ByRef

回复8:
http://support.microsoft.com/kb/187912

Visual Assist 6.0:提升VC6嵌入式开发效率的智能插件实战指南 在C/C++软件工程,特别是嵌入式与MCU开发领域,智能代码补全和高效导航是提升生产力的核心技术。其原理在于构建实时、精准的符号数据库,通过增量更新实现快速响应。这项技术的核心价值在于将开发者从繁琐的代码查找与输入中解放出来,显著减少错误,并专注于逻辑设计与架构。在实际应用场景中,无论是维护遗留项目还是进行嵌入式驱动开发,此类工具都能极大改善在Visual C++ 6.0等经典IDE中的编码体验。本文聚焦于Visual Assist 6.0这一经典插件,深入解析其智能感知与代码补全机制,并结合代码导航与重构 阅读详情

相关推荐

VCap2860视频采集盒开发套件:VB/VC工程源码、WDM驱动接口与ActiveX控件全集

面向Windows平台USB视频采集设备集成需求,提供VCap2860硬件配套的完整开发支持。内含可直接编译运行的VB示例工程(含Form1.frm、frmtest.frm等窗体文件及devwdm_api.bas接口封装)和VC示例工程(含.dsp/.dsw项目配置、VCsampleDlg.h/.cpp界面逻辑、StdAfx.h标准头文件等),所有代码基于WDM驱动模型构建,兼容主流Win32桌面应用开发环境。配套提供核心头文件devwdm.h、静态链接库devwdm.lib、注册即用的ActiveX控件d

chair的专栏 220

封装回调函数——为对象方法(Object Method,参数中带this指针的函数) 构造 普通函数(参数中无this指针的函数)形式 的入口

文件:mFunEntry.bas功能:封装回调函数——为对象方法(Object Method,参数中带this指针的函数) 构造 普通函数(参数中无this指针的函数)形式 的入口作者:zyl910版本:V1.0日期:2005-6-24  在VB使用回调函数很麻烦,得写在模块中,且很难封装。这个模块就是为了解决这个问题。 原理:VB对象的结构~~~~~~~~~~~~~~~~~~

zyl910的专栏 4508

VB调用函数地址指针

VB调用函数指针,支持任意类型返回值(UserType必须传入指针),任意类型任意个数参数(不直接支持Optional,ParamArray),纯VB+内嵌汇编,汇编代码改自"阿国哥"的调用函数指针内嵌汇编代码,当然我不懂汇编,调试了很久才成功,在XP SP3+VB6.0下成功运行。

VB.NET调用C语言写的dll中的函数

C语言函数声明: __declspec(dllexport) int __stdcall test1(int a,const char* str); __declspec(dllexport) void __stdcall test2(unsigned char* buf,int len); VB.NET调用C语言函数: '函数声明 <DllImport("test.dll", EntryPoint:="test1")> Public Function test1(ByVal a As

csdn_gddf102384398的博客 1364

Shopee商品详情页反爬实战:手把手逆向x-sap-Ri和x-sap-Sec参数(附完整调试过程)

本文详细解析了Shopee商品详情页反爬机制中的x-sap-Ri和x-sap-Sec参数逆向过程。通过JS逆向技术,从环境数据采集到多层哈希运算,完整拆解了这两个关键参数的生成逻辑,并提供了实战技巧和Node.js实现方案,帮助开发者应对Shopee的动态加密挑战。

weixin_33701251的博客 1596

告别功能限制:Win11家庭版无损升级专业版全攻略

本文详细介绍了如何将Win11家庭版无损升级到专业版的全过程,包括升级前的准备、两种官方升级方案(Microsoft Store购买和使用产品密钥)以及命令行升级方法。升级后可解锁远程桌面、组策略编辑器和BitLocker加密等高级功能,适合需要更多商业功能的用户。

weixin_32822843的博客 702

VB中如何传递指针给DLL

 VB默认的传递方式就是传指针(ByRef,也就是把变量的地址传递给所调用的函数)。如果要传值(也就是把变量的值传递给所调用的函数)反要在参数声明前加ByVal。所以如果你传递的参数是普通的数据类型,在参数前什么都不要加就行了。如C语言声明为:     void __stdcall MyProc(short * nPara);     则VB声明为:     Declare Function My

njstalk的专栏 4228

Cgroup对进程所占用的CPU与内存资源同时进行限制的测试

测试环境:Ubuntu。处理器数量:1CPU。内存大小:2048MB。 以下是测试程序mem_cpu_test.c的代码。 将mem_cpu_test.c编译为可以运行的程序mem_cpu_test。 运行程序,并用top命令查看mem_cpu_test所占用的系统资源情况,可以看到,mem_cpu_test使用了50%左右的内存资源,也就是1000MB左右,并占用了接近全部的CPU资源。 关闭以上的程序后,在Cgroup子系统memory和cpu下分别创建进程组test1和test2。 并设置tes

qq_44998067的博客 1153

在VB和DLL间传递字符串

        用VB调用VC编写的DLL时,必须注意参数的匹配。VC中的变量,都是采用的32位,而VB中的,很多是16位,这就要进行相应的转化。转化的法则很多地方都有。我这里建议大家尽量使用VB,VC中都有,而且一致的变量。比如long型和double型。如果可能,尽量采用这些简单的变量类型。可以省缺很多麻烦。要注意,传递变量值,在VB声明函数是,变量前加ByVal限定字,如果传递指针,要加

行进中开火 6359

VT System故障排查指南:从License验证到硬件连接全解析

本文详细解析VT System故障排查全流程,从License验证、Real Bus模式设置到硬件连接与VT6000组网配置。针对VT7900板卡等特殊设备提供专业解决方案,并分享系统级故障的二分法排查技巧,帮助工程师快速定位和解决CANoe环境下的各类硬件识别问题。

weixin_29269441的博客 255

【音视频】PJSIP库——示例简介、C++类说明

aectest音频回声消除测试工具,用于演示音频处理模块中的回声消除(AEC)功能,通常用于 VoIP 场景中优化语音质量。auddemo音频播放 / 录制演示,展示如何使用 PJProject 的音频接口进行基本的音频数据采集、播放和处理,例如波形显示或格式转换。stereotest立体声处理测试,可能用于演示多声道音频的处理方式,如混音、声道分离等。tonegen音频信号生成工具,用于生成测试用的音频信号(如正弦波、音调等),常用于音频设备测试或调试。recfile。

郭老二 434

C++写的DLL,传结构给VB用

由于某些情况下,我们需要用CB或是VC写一个DLL,而调用它的确实VB。这里特别强调一下使用标准数据类型的问题,就是说用C++写的东西,导出的函数最好使用标准的int,char,long,double...标准类型以及他们的指针。很多人都强调过这个问题。但是我最近遇到一个需要VB传结构给CB做的DLL,然后数据返回到结构的情况。typedef struct Xtest{char a[100];ch

vrix的专栏 1757

基于Matlab的无迹卡尔曼滤波惯性导航与DVL组合导航

航天航空领域中的惯性导航是一种基于惯性测量单元(Inertial Measurement Unit,IMU)的导航方法,可以提供航向、速度和位置等信息。深度/速度测量器(Doppler Velocity Log,DVL)是一种常用的传感器,可用于测量水下航行器的速度。通过将DVL与无迹卡尔曼滤波相结合,可以实现高精度的组合导航。本文介绍了基于Matlab的无迹卡尔曼滤波(UKF)惯性导航与DVL组合导航的方法。以上是一种简化的示例代码,您可以根据实际应用需求进行相应的修改和优化。

DevSavantX的博客 418

1112---Windows 环境下 Visual C++ 、GCC 、Visual Basic6 动态访问DLL库应注意的有关事项

本文总结了Visual Basic6 访问DLL动态库的情况,并顺便探讨了C++ 动态加载DLL的情况(LoadLibrary)。

gmriwyf的博客 908

实战:RK3568 Android14 调试 MIPI DSI 液晶屏

LCD1_RST -> 对应原理图网络连接到 GPIO。LCD1_PWR_EN ->用于给屏幕 VCC 供电。LCD0_BL_EN / LCD0_BL_PWM -> MP3302 升压芯片驱动 LED 灯条。![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/100f2be7f763494da1032464e272e63b.png&pinctrl {/* 配置 LCD_RST 和 LCD_EN */

qq_33427070的博客 1548

基于Cesium移动的天空云

天空中的云朵也算是一种天气气候的效果,它能更加逼真的反映当前的天气状况,可以是白云朵朵,也可以是乌云密布,结合其他天气效果,可以组合形成较为真实的三维可视化场景。

星云数海的博客,一个专注GIS十多年的GISer人。 447

VB+VC混合编程疑难问题解

VB+VC混合编程疑难问题解   我们在编写Visual Basic应用程序的时候常常需要自己动手编写一些库函数或ActiveX控件,而这些函数或者控件常常采用VC++语言来写,因而也常为VB和VC两种语言之间不同参数类型、内存空间使用方法等问题为难,怎么做好呢?本文介绍了在V

特权份子的专栏 732

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VB和VC混合编程

 我们在编写Visual Basic应用程序的时候常常需要自己动手编写一些库函数或ActiveX控件,而这些函数或者控件常常采用VC++语言来写,因而也常为VB和VC两种语言之间不同参数类型、内存空间使用方法等问题为难,怎么做好呢?本文介绍了在VB和VC混合编程的情况下对这些问题的解决方法。  一、自定义类型参数向DLL库函数的传递  用VB, VC++进行混合编程时,通常需要在VB中调用

guomei的专栏 1789

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

VB+VC混合编程疑难问题解[yesky]

注:转自yesky,原贴地址:http://soft.yesky.com/SoftChannel/72342371928637440/20040923/1857428.shtml作者:务实时间:2004-09-23出处:天极网责编:方舟  我们在编写Visual Basic应用程序的时候常常需要自己动手编写一些库函数或ActiveX控件,而这

一线曙光在前方! 1362

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

PowerBuilder调用DLL参数类型映射与内存管理实战指南

在软件集成开发中,动态链接库(DLL)是实现代码复用和功能扩展的核心技术,其原理在于通过导出函数提供二进制级别的接口服务。理解调用约定(如StdCall与Cdecl)和内存管理模型是确保跨语言调用的技术关键,这直接关系到栈平衡和数据传递的准确性。对于企业级应用维护,尤其是在PowerBuilder这类传统开发环境中,正确处理参数类型映射能显著提升系统稳定性和集成效率。本文聚焦于字符串、结构体等复杂类型的传递,通过解析blob缓冲区的安全使用和适配层设计,为PowerBuilder与C/C++ DLL的深度集

weixin_34302561的博客 467

ATL编程初级教程(图文事例)(VC6)

http://blog.youkuaiyun.com/titilima/archive/2004/07/18/44273.aspx介绍  本教程的目的是告诉你如何使用ATL创建一个COM服务器,并使用Visual C++和Visual Basic程序来分别调用这个服务器。我并不想深入探讨COM的细节,也不想让你深陷于IDL之中。这一教程只是为VC++的新手程序员设计的,告诉他们利用ATL来创建一个COM对

黑色幽灵的专栏 3911

VC ATL COM 新手入门教程[转]

                                 介绍本教程的目的是告诉你如何使用ATL创建一个COM服务器,并使用Visual C++和Visual Basic程序来分别调用这个服务器。我并不想深入探讨COM的细节,也不想让你深陷于IDL之中。这一教程只是为VC++的新手程序员设计的,告诉他们利用ATL来创建一个COM对象有多么简单,并让他们能对ATL产生更多的兴趣。第1步:

4133

ATL(VC6)编程初级教程

<br />  本教程的目的是告诉你如何使用ATL创建一个COM服务器,并使用Visual C++和Visual Basic程序来分别调用这个服务器。我并不想深入探讨COM的细节,也不想让你深陷于IDL之中。这一教程只是为VC++的新手程序员设计的,告诉他们利用ATL来创建一个COM对象有多么简单,并让他们能对ATL产生更多的兴趣。<br />第1步:启动ATL COM Wizard<br />  你所需要做的第一件事情就是启动Visual C++并创建一个新的工程,选择“ATL COM Wizard”,工

阿草 1388

MFC DLL开发实战:从类型选型到内存管理的完整指南

动态链接库(DLL)是Windows平台实现代码复用和模块化开发的核心技术,它允许程序在运行时动态加载和调用外部函数库,从而提升软件的可维护性和部署灵活性。其原理在于将功能模块编译为独立的二进制文件,通过导出函数或类接口供主程序调用,有效减少了内存占用和编译时间。在MFC桌面开发中,DLL技术价值尤为突出,能够解决大型遗留系统的模块耦合问题,实现团队并行开发和功能热更新。本文聚焦于MFC框架下DLL的工程实践,深入解析共享MFC DLL、静态链接MFC以及MFC扩展DLL三种类型的选型策略与适用场景,并针对

weixin_34082789的博客 372
上一篇: C/C++函数调用方式
下一篇: Crypto++ 加解密
daichanglin
博客等级 码龄21年 68粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值