现在的位置: 首页 > 综合 > 正文

dev c++ dll 制作与调用学习笔记

2013年03月29日 ⁄ 综合 ⁄ 共 1559字 ⁄ 字号 评论关闭

一、制作 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;
    
     }
 
 }

 

抱歉!评论已关闭.