程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#調用非托管動態庫中的函數(1)

C#調用非托管動態庫中的函數(1)

編輯:關於C語言

C#如何調用一個非托管動態庫中的函數呢,比如用VC6寫的動態庫,總之C#調用動態庫的過程是比Java調用DLL動態庫方便快捷多了,下面舉例說明這個過程。

1。創建一個非托管動態庫

代碼如下:

//這一句是聲明動態庫輸出一個可供外不調用的函數原型.
extern  "C" __declspec(dllexport) int add( int , int );
int add( int a, int b)
{
//實現這個函數returna+b;
}

注意上面代碼,一定要加上 extern"C" ,不能生成的動態庫中的導出函數名就不會是add,而是像?add@@YAHHH@Z樣子,後面只是通過函數名 add 來定位函數入口就會出問題。

保存成C或者CPP文件都可以,接下來就用命令 cl (這個命令VC6提供) 來編譯生成一個動態庫,命令如下:

C:>cl /LD MyLib.cpp
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
MyLib.cpp
Microsoft (R) Incremental Linker Version 6.00.8447
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
/out:MyLib.dll
/dll
/implib:MyLib.lib
MyLib.obj
Creating library MyLib.lib and object MyLib.exp

可以看到在C盤根目錄下生成了你要的動態庫 MyLib.Dll ,還伴隨著生成了MyLib.lib、MyLib.obj、MyLib.exp文件,上面命令cl的參數/LD就是生成動態庫文件

2.編寫C#程序調用動態庫

using System;
using System.Runtime.InteropServices; //這是用到DllImport時候要引入的包
public  class InvokeDll{
[DllImport( "MyLib.dll" , CharSet=CharSet.Auto)]  
staticexternint add( int a, int b); //聲明外部的標准動態庫, 跟Win32API是一樣.
public  static  void Main()
{
Console.WriteLine(add(10,30));
}
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved