在 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类型 |
---|---|
short | Integer |
int | Long |
long | Long |
unsigned int | Long |
unsigned long | Long |
bool | Boolean |
unsigned char | Byte |
float | Single |
double | Double |
参考:
https://blog.csdn.net/maillibin/article/details/48522953