您现在的位置是:首页 > 正文

VB调用C++编写的dll(接口约定)

2024-04-01 00:30:53阅读 1

dll示例代码

// 32位编译(VS2017条件编译)
#ifdef _M_IX86
#pragma comment(linker, "/export:Send_Str_To_DLL_TEST=_Send_Str_To_DLL_TEST@4")
#pragma comment(linker, "/export:Start_Server_CallBack=_Start_Server_CallBack@4")
#endif // _M_IX86
// 64位编译(VS2017条件编译)
#ifdef _M_X64
//#pragma comment(lib,"QDPay_mt64.lib")
#endif // _M_X64

typedef void(__stdcall  *RX_Callback)(const char * str);
//回调函数作为参数
int _stdcall Start_Server_CallBack(RX_Callback rx_p) {
	RX_Callback p_fun=rx_p;
	p_fun("123456");
}
//
// 字符串作为参数
extern "C" _declspec(dllexport) int _stdcall  Send_Str_To_DLL_TEST(char* p) {
	//std::string(p).length();
	return std::string(p).length();
}

VB示例代码

模块代码:

'CopyMemory 内存拷贝API
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
'Start_Server_CallBack
Public Declare Sub Start_Server_CallBack Lib "C:\\Users\\Administrator\\source\\repos\\TCP_DataManager_DLL\\Debug\\TCP_DataManager_DLL.dll" (ByVal p_func As Long, ByVal result As Integer)

'Send_Str_To_DLL_TEST
Public Declare Function Send_Str_To_DLL_TEST Lib "TCP_DataManager_DLL.dll" (ByVal file_name As String) As Integer

'Server_Msg_Event
'ByRef c As String
'ByVal c As String
Sub Server_Msg_Event(ByVal c As Long)
  Dim msg As String
  CopyMemory msg, c, 4
  MsgBox msg   '打印服务端消息
  
End Sub
'Start_Server_CallBack 接口调用测试
Public Function test()

   Call Start_Server_CallBack(AddressOf Server_Msg_Event)  '调用回调函数

End Function



窗体代码:

Private Sub Form_Load()
test
End Sub

网站文章

  • 【笔记】CIOU公式

    【笔记】CIOU公式

    eg1: c = torch.tensor([[1.0000, 2.0000], [0.0000, 0.0000], [0.0000, 0.0000]]) print(torch.sum(torch.pow((c), 2), axis=0)) tensor([1., 4.]) c = torch.tensor([[1.0000, 2.0000],

    2024-04-01 00:30:47
  • jdk与jre的区别 热门推荐

    jdk与jre的区别 热门推荐

    首先笔者想阐明的是:JDK和JRE没想象中的那么简单。 相信大家都知道JDK和JRE是什么,但是具体干什么用不妨先试问下自己,如果能说出个所以然来,那么这篇文章大神请自觉忽略,呵呵,或者可以温故一下。 如果有哪里说的不对的地方还望指出,谢谢。 下面来简单说明下 先上张图,宏观的看一下 从图中可以看出JDK包含JRE包含JVM... JDK:java developmen...

    2024-04-01 00:30:43
  • Python经典面试题

    Python经典面试题

    一、Python经典面试题1、用你觉得最Python的方式来实现a、b元素交换a,b=b,a2、Python实现—个单例模式单例模式确保某一个类只有一个实例存在当你希望在整个系统中,某个类只能出现一个...

    2024-04-01 00:30:38
  • VS2019实用调试技巧

    VS2019实用调试技巧

    Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。 Release 称为发布版本,编译器对我们写的代码进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用,Release版本不能调试。

    2024-04-01 00:30:13
  • dependency walker工具简介及使用

    dependency walker工具简介及使用

    dependency walker工具简介及使用

    2024-04-01 00:30:06
  • django中使用celery做异步任务、定时任务

    django中使用celery做异步任务、定时任务

    一、celery架构图 生产者消费者模型 调度方法 二、配置使用 celery很容易集成到Django框架中,当然如果想要实现定时任务的话还需要安装django-celery-beta插件,后面会说明...

    2024-04-01 00:29:58
  • 蜂鸟E203开发环境准备工作

    蜂鸟E203开发环境准备工作

    蜂鸟E203开发环境准备工作WindowsWindows工具“NucleiStudio”的快速上手Windows工具“Eclipse”的快速上手Linux安装VMware,安装Ubuntu18.04u...

    2024-04-01 00:29:36
  • Android 共存debug release版, 并设置不同名字

    一部手机上同时安装app的debug版和release版,并显示不同名字 build.gradle buildTypes { debug { applicationIdSuffix ".debug" resValue "string", "app_name", "@string/app_name_debug" ...

    2024-04-01 00:29:28
  • 神经网络向量化实现

    神经网络向量化实现

    矢量化编程 当使用学习算法时,一段更快的代码通常意味着项目进展更快。例如,如果你的学习算法需要花费20分钟运行完成,这意味着你每个小时能“尝试”3个新主意。但是假如你的程序需要20个小时来运行,这意味着你一天只能“尝试”一个新主意,因为你需要花费这么长时间来等待程序的反馈。对于后者,假如你可以提升代码的效率让其只需要运行10个小时,那么你的效率差不多提升一倍。 矢量化编

    2024-04-01 00:29:21
  • 动态数据源切换 AbstractRoutingDataSource

    动态数据源切换 AbstractRoutingDataSource

    2024-04-01 00:28:57