C 如何呼叫C寫的Win32 DLL

2022-06-14 20:18:07 字數 1408 閱讀 8621

1. 首先,在visual studio中,我們建立乙個visual c++的專案

型別選擇win32 project,繼續選擇dll型別

該專案取名叫做mydll

1) 新增mydll.h標頭檔案,**如下:

#ifdef a_exports

#define

dll_api __declspec(dllexport)

#else

#define

dll_api __declspec(dllimport)

#endif

extern"c

"dll_api 

void

helloworld();

這裡helloworld()就是等下我們要暴露給c#呼叫的c方法。

注意:必須給函式增加extern "c"關鍵字,否則等下將無法找到該

函式的入口點。

2)新增mydll.cpp檔案,**如下:

#include 

"stdafx.h

"#include 

"mydll.h

"#ifdef _managed

#pragma

managed(push, off)

#endif

bool apientry dllmain( hmodule hmodule,

dword  ul_reason_for_call,

lpvoid lpreserved

)return

true;

}void

helloworld()

#ifdef _managed

#pragma

managed(pop)

#endif

2. 編譯成功!接下來我們便可以新增乙個c#控制台專案了

c#測試**如下:

using

system;

using

system.collections.generic;

using

system.text;

using

system.runtime.interopservices;

namespace

testdll}}

在這裡我要特別指出的是兩點:

1) 必須使用如下命名空間

using

system.runtime.interopservices

[dllimport(

"mydll.dll")]

public

extern

static

void

helloworld();

執行程式,會看到彈出hello world對話方塊!

C 程式呼叫win32寫的dll檔案

1 注意函式引數的呼叫方式 要跟win32的一樣,因為學習的是羅雲彬的win32彙編,採用的 stdcall方式,所以使用隱式呼叫的時候,在設定接受函式一定要宣告一樣的呼叫如 typedef int stdcall myfunc dword dword 2 在使用getprocaddress函式的時...

C 呼叫C 寫的DLL

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

C 中如何呼叫Delphi寫的Dll

在以前用delphi開發的專案中,會經常用到tchart這個畫圖控制項,它本身很強大,支援各類圖,如點線圖,柏拉圖,柱狀圖等等,加上可以輸出成bmp,jpeg,jpg,svg,gif等各種格式,很好用,當時也封裝成比較獨立的dll檔案。這次開發.net程式正好派上用場。幾個關鍵技術點 1 c 要以非...