關於c 和C 如何呼叫自己用c 寫的dll檔案

2021-06-11 21:00:36 字數 1069 閱讀 2232

今天學習了,如何在c++和c#中通過呼叫自己寫的dll檔案中的函式來實現一定的功能。可能有些簡單,但是有助於初學者學習。

首先分開講解:

用c++編寫dll檔案(就是編寫c++控制台程式):

// dll.cpp : 定義 dll 應用程式的匯出函式。

//#include "stdafx.h"

extern "c" _declspec(dllexport) int add(int a,int b)

_declspec(dllexport) int sub(int a,int b)

這裡可以看到兩個的不同之處,add函式可以被c#呼叫,可是 sub函式值可以被c++程式呼叫。

其次編寫測試c++呼叫上面的這個dll檔案中的函式:

// dlltest.cpp : 定義控制台應用程式的入口點。  

//

#include "stdafx.h"

#includeusing namespace std;

//extern int add(int a,int b);

extern int sub(int a,int b);

int _tmain(int argc, _tchar* argv)

這裡需要注意,要把生成的那個.dll和.lib檔案一起 放在這個測試程式的.exe同乙個資料夾中,同時還要通過新增現有項把這兩個檔案載入到這個工程中通常是資源檔案中。

最後編寫測試c#呼叫上面的這個dll中的函式:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.runtime.interopservices;

namespace mydlltestfile2

}}

這裡需要注意的是,第一,預設入口點約定,第二,執行的時候需要把那個dll和這個應用程式exe在同乙個資料夾中。

C呼叫自己寫的動態庫

自己做了libhello.so庫後,寫了個簡單的測試 將測試 和庫檔案放到了同一路徑下,gcc main.c l.lhello,結果執行後報錯,a.out error while loading shared libraries libhello.so cannot open shared obje...

C 呼叫C 寫的DLL

方法有不少,這裡記錄其中的乙個方法。編譯 呼叫通過了的。期間遇到的問題是c 呼叫時傳遞string型別的引數和返回值會報錯。targetinvocationexception異常,值不在範圍內,記憶體不可訪問等等。解決方法是 在c 的dll中將string型別的引數返回值改為lptstr型別。在c ...

關於delphi呼叫c 寫的webservice

因為這次專案涉及到跨平台的,所採用delphi呼叫webservice 一開始的時候用delphi自動生成wsdl。呼叫hellowordl成功。非常開心,可是問題來了,helloworld是不需要傳引數,於是我就寫了乙個簡單的函式 public string returnstr string tt...