VB 调用 C

在 Windows 上 GUI 玩的最溜当属 VB,现在想做一个小工具,解析数据协议,想利用 C 语言的强大字符处理能力,展示部分还是用VB做方便,基于此目的,前期方案论证开始了...

环境:Win10 + Dev-C++ 5.11 + VB6.0

首先在Dev-C里创建一个工程:

 

注意: 选择32位编译器

 编辑程序:

dllmain.c

/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>
 
DLLIMPORT __stdcall void HelloWorld()
{
	MessageBox(0,"Hello World from DLL!\n","Hi",MB_ICONINFORMATION);
}
 
DLLIMPORT __stdcall void HelloWorld1(char *inputString)
{
	MessageBox(0,inputString,"Hi",MB_ICONINFORMATION);
}
 
DLLIMPORT __stdcall char *HelloWorld2(char *inputString)
{
	return inputString;
}

 
DLLIMPORT __stdcall int Sum(int *a, int length)
{
	int sum=0;
	int i;
	
	for(i=0;i<length;i++) {
		sum+=a[i];
	}
	
	return sum;
}


 
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
	switch(fdwReason)
	{
		case DLL_PROCESS_ATTACH:
		{
			break;
		}
		case DLL_PROCESS_DETACH:
		{
			break;
		}
		case DLL_THREAD_ATTACH:
		{
			break;
		}
		case DLL_THREAD_DETACH:
		{
			break;
		}
	}
	
	/* Return TRUE on success, FALSE on failure */
	return TRUE;
}

dll.h

#ifndef _DLL_H_
#define _DLL_H_
 
#if BUILDING_DLL
#define DLLIMPORT __declspec(dllexport)
#else
#define DLLIMPORT __declspec(dllimport)
#endif
 
DLLIMPORT __stdcall void HelloWorld();
DLLIMPORT __stdcall void HelloWorld1();
DLLIMPORT __stdcall char *HelloWorld2(char *);
DLLIMPORT __stdcall int Sum(int *a, int length);

#endif

编译:

 

 把生成的dll文件拷贝到vb工程目录下:

 在VB里粘贴如下代码

Private Declare Sub HelloWorld Lib "Test.dll" ()
Private Declare Sub HelloWorld1 Lib "Test.dll" (ByVal inputString As String)
Private Declare Function HelloWorld2 Lib "Test.dll" (ByVal inputString As String) As String
Private Declare Function Sum Lib "Test.dll" (ByRef a As Long, ByVal b As Long) As Long

 
Private Sub Command1_Click()

    Dim b(2) As Long
    Dim a As Long

    HelloWorld
    HelloWorld1 ("VB程序中也可以传入字符串")
    Dim s As String
    s = HelloWorld2("测试字符串传递输出")
    MsgBox s
    
    b(0) = 1
    b(1) = 2
    b(2) = 3
    a = Sum(b(0), 3)
    MsgBox "a=" + CStr(a)
    
End Sub

直接调试运行

 

 

C参数在VB中的声明

C语言的字符串要特殊处理

char *: ByVal args As String
C参数在VB中的声明对照表
C类型VB类型
shortInteger
intLong
longLong
unsigned intLong
unsigned longLong
boolBoolean
unsigned charByte
floatSingle
doubleDouble

 

参考: 

https://blog.csdn.net/redraiment/article/details/4444278?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v25-2-4444278.nonecase&utm_term=vb%E7%A8%8B%E5%BA%8F%E8%B0%83%E7%94%A8c%E8%AF%AD%E8%A8%80&spm=1000.2123.3001.4430

https://blog.csdn.net/maillibin/article/details/48522953

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值