vs2012创建dll
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文件夹。