一、制作 dll文件
通过建立 dll 工程 如 DLLTEST 右击工程 new File ,记得#include"dll.h"
1、 再写函数 如
int show_string(char * str){
.........
}
2、 在dll.h 中加上 DLLIMPORT show_string(char * str);
编译得到两个有用的东西。
DLLTEST.DLL
libDLLTEST.a
二、dll 加载与调用
加载分静态 与 动态
静态很简单,add Library of Object 先择.a文件
动态加载可以不用.a 文件 只要有 .dll 文件就够
示例:
#include <stdlib.h>
#include<stdio.h>
#include<wtypes.h>
#include<windows.h>
int main(int argc, char *argv[])
{
typedef int (*FUNT)(char * str);// 函数指针类型
HINSTANCE Hint = LoadLibrary("C:/Users/LiuBin/Desktop/Finger/DLLTEST.DLL");// 加载 dll
FUNT show_string = (FUNT)GetProcAddress(Hint,"show_string");// 取得 dll 导出的 show_string方法
printf("%d",show_string);
if(!show_string){
MessageBox(0,"load dll error","ERROR",MB_ICONINFORMATION);
}else{
show_string("my string");
}
system("PAUSE");
return 0;
}
制作好dll 后同样可以用其它语言去调用如:java 通过 jNative 调用。
以下是调用示例
package cn.connectDll;
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
public class ConnectDll {
public static void main(String args[]){
testFromPath("E:/dev C++ work");
}
public static int testFromPath(String path){
path+="/DllTest.dll";
//通过绝对路径加装文件
System.load(path);
show_string();
System.out.println("装载完成");
return 0;
}
public static int show_string(){
JNative n=null;
try{
n=new JNative("DllTEST.dll","show_string");
n.setRetVal(Type.INT);
int i=0;
n.setParameter(i++, "show_string");
n.invoke();
String str= n.getRetVal();
System.out.println("返回值"+str);
return 0;
}catch(Exception ef){
ef.printStackTrace();
}
return 1;
}
}