1,建立工程
文件->新建->项目->模板(Visual C++)->Win32(项目)->->DLL(D) 空项目
2,添加代码
在头文件中添加.h文件。
//用于头文件中,在预编译中,只加载一次
#pragma
once
;
#include
"windows.h"
typedef
struct
{
byte
b1;
byte
b2[20];
}
MyStruct
;
extern
"C"
__declspec
(
dllexport
)
int
add(
int
*valuePointer1,
int
value2);
extern
"C"
__declspec
(
dllexport
)
int
testByteArray(
byte
byteValue[],
int
length);
extern
"C"
__declspec
(
dllexport
)
int
testBytePointer(
byte
*value);
extern
"C"
__declspec
(
dllexport
)
int
testStruct(
MyStruct
value);
extern
"C"
__declspec
(
dllexport
)
int
testStructPointer(
MyStruct
*value);
添加cpp文件
#include
"mytestdll.h"
int
add(
int
*
valuePointer1
,
int
value2
) {
return
*
valuePointer1
+
value2
;
}
int
testByteArray(
byte
byteValue
[],
int
length
)
{
int
result = 0;
for
(
int
i = 0; i <
length
; i++) {
result +=
byteValue
[i];
}
return
result;
}
int
testBytePointer(
byte
*
value
)
{
*
value
= 0x39;
return
*
value
;
}
int
testStruct(
MyStruct
value
)
{
int
result = 0;
result +=
value
.b1;
for
(
int
i = 0; i < 20; i++) {
result +=
value
.b2[i];
}
return
result;
}
int
testStructPointer(
MyStruct
*
value
)
{
int
result = 0;
result += (*
value
).b1;
for
(
int
i = 0; i < 20; i++) {
result += (*
value
).b2[i];
//修改结构体中的b2每个值是1
(*
value
).b2[i] = 0x31;
}
return
result;
}
3,编译选项
在本地调试器中 选择 指定 Release Win32 这样编译出来的就是一个32位的dll库。但是现实中我们可能需要在java中通过jna来调用这个动态库,由于现在的系统大部分都是x64平台的,jdk安装的版本也是64位这个时候就会出现无法调用loadlibrary不行的情况,因此要编译64位的系统。Win32->配置管理器->活动解决方案平台->活动解决方案平台(新建)->键入或选择新平台(x64)->关闭。重新生成解决方案,就可以看到在项目路径下,有一个x64文件夹。