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

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

編輯:關於C語言

保存為InvokeDll.cs文件, 與MyLib.dll置於同一目錄, 編譯該文件.

C:>csc InvokeDll.cs

Microsoft (R) Visual C# .Net 編譯器版本 7.10.3052.4

用於 Microsoft (R) .Net Framework 版本 1.1.4322

版權所有 (C) Microsoft Corporation 2001-2002。保留所有權利。

將生成Invokedll.exe, 可以執行該文件.

C:>InvokeDll

40

我們看到C#調用了非托管動態庫的函數 add 。執行前保證 MyLib.dll 在能夠被 InvokeDll 程序加載到的路徑上。

回過頭來,如果我們在MyLib.cpp中沒有加上 extern"C" 在,那麼C中通過函數名 add 定位不到導出方法(因為函數名在動態庫中已經變了),執行invokeDll時就會出現如下錯誤。

C:>InvokeDll

未處理的異常: System.EntryPointNotFoundException: 無法在 DLL MyLib.dll 中找到名為 add 的入口點。

at InvokeDll.add(Int32 a, Int32 b)

at InvokeDll.Main()

對於沒有加上 extern "C" 的函數原型生成的動態庫,我們就得用別的方式來調用了,具體怎麼做,我現在還不知道。下面還有一個問題,上面的例子只是演示了動態庫中函數非常簡單的情況,如果函數傳遞的參數是指針,或者更復雜的數據類型,又如何操作呢?以後會深究的。

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