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 要以非...