易語言使用cdll
1. 易語言調用C語言寫的dll問題
你用
__declspec
(dllexport)
來寫DLL函數頭的話這個DLL只能被C或C++調用
將函數寫到
.DEF
文件的話可以讓所有編程語言都能調用
2. 易語言可不可以調用c#生成的DLL,怎麼搞,注意事項,謝謝
可以調用C#編寫的dll,不過要注意以下事項:
1、導出函數應採用標准方式聲明,即必須以C風格聲明(如:函數加前綴「WINAPI」等修飾)導出函數,易語言只支持標準的C風格導出函數,導出函數聲明不正確的話調用時可能出現堆棧錯誤;
2、導出函數的參數不應包含C#支持但易語言不支持的特性,否則用易語言無法調用;
3、使用了C#編寫的dll後,可能需要附帶上.net運行時組件,因為不是所有的機器上都有,如果別人的機器上沒有,那麼你的程序就無法運行了。
3. 易語言怎麼調用C寫的DLL
去官方論壇問問,那裡的人多。
祝你好運
4. 易語言如何調用C語言載入的Dll---請高手指點。
在易語言的左邊功能選項找---程序---dl命令--右鍵---插入新dll命令 DLL命令名=你給他的名稱(在窗口程序下可直接代碼輸入) DLL庫文件名=你調用那個DLL命名 DDL庫中的對應名=在被調用的DLL的子程序完了後直接在窗口下輸入代碼(DLL命令名) 打包的時候將DLL放置包下(可減少錯誤率)
5. C+的dll如何用易語言正確調用
在編寫程序的時候往往需要調用到別的語言編寫的DLL文件,下面先來看一下在易語言中如何調用VC編寫的DLL呢,首先用VC編寫一個簡單的DLL文件,代碼如下:
int WINAPI add(int x,int y)
{
return x+y;
}
這是一個簡單的兩個數加法操作,返回兩個數相加的結果,這里我生成的是MFC DLL,並且需要在def中導出add函數。
下面用易語言來調用它,首先在易語言中需要插入一個DLL命令,代碼如下:
.版本 2
.DLL命令 調用CDLL, 整數型, "cdll.dll", "add"
.參數 x, 整數型
.參數 y, 整數型
並且保存工程文件與DLL文件在一起,否則可能會報找不到DLL的錯誤.下面在按鈕中添加如下代碼:
.版本 2
.子程序 _按鈕1_被單擊
信息框 (調用CDLL (5, 5), 0, )
這樣我們傳遞了兩個數後就可以返回結果了,如下圖:
上圖的信息框顯示返回的結果是10,那麼這就是正確的了,易語言調用VC的DLL需要注意類型,並且DLL函數需要WINAPI或stdcall,否則也會報錯。
下面我們再來看一下VC如何調用易語言的DLL,還是先用易語言編寫一個DLL文件,建立一個DLL動態鏈接庫工程,新建一個子程序,代碼如下:
.版本 2
.子程序 add, 整數型, 公開
.參數 x, 整數型
.參數 y, 整數型
返回 (x + y)
下面我們用VC來調用這個DLL並且返回結果,代碼如下:
HINSTANCE hMod = LoadLibrary("e.dll");
typedef int(WINAPI *ADD)(int,int);
ADD myadd = (ADD)GetProcAddress(hMod,"add");
CString str;
str.Format("%d",myadd(5,5));
MessageBox(str);
FreeLibrary(hMod);
調用後結果如下圖:
這樣就得到了正確的結果了,需要注意的是易語言子程序必須公開,公開也就是與VC中def文件導出是一樣的道理。
6. 易語言調用C語言的dll堆棧錯誤!
調用方式是不是一樣?易語言裡面如果有能設置的話,把函數的調用方式設置成Cdecl或者
C語言方式
之類之類……沒用過易語言不知道怎麼設。不過多半是這個問題
實在找不到設置的地方的話,C語言代碼改改,
int
add(int
a,int
b)
改成
int
__stdcall
add(int
a,int
b)
7. 易語言調用c++的DLL數據類型問題
前三個參數,直接使用「位元組集」即可,後兩個不確定位元組集是否可用,可能需要A2W轉換一下再傳入,不確定。
8. 易語言調用C語言的dll堆棧錯誤!
調用方式是不是一樣?易語言裡面如果有能設置的話,把函數的調用方式設置成Cdecl或者 C語言方式 之類之類……沒用過易語言不知道怎麼設。不過多半是這個問題
實在找不到設置的地方的話,C語言代碼改改,
int add(int a,int b)
改成
int __stdcall add(int a,int b)
9. 易語言怎麼調用C寫的DLL
C#編寫後的代碼是基於CLR公共語言運行庫上的,是不同於C++輸出的傳統DLL,所以不能被易語言中調用,你所列的方法是適用於傳統VC++輸出的DLL,如API
10. 易語言如何調用指定DLL文件
基本說明本文所描述的部分功能需易語言 4.01 或以上版本支持。函數; 函數。 「在易語言中調用 DLL」包含兩方面的內容:調用 Windows 系統 API 函數;調用普通 DLL 函數。 易語言中 」包含兩方面的內容: 下文用到的「調用 API」或「調用 DLL」等字眼,除非特別註明,一般都是指以上兩方面之一或之和,視 上下文而定。絕大多數情況下,無需明確區分調用的是系統 API 還是普通 DLL。中的導出函數。 目前易語言只支持以 stdcall 方式調用 DLL 中的導出函數。 Windows 系統 API 一般都是以 stdcall 調用方式導出的,故在易語言中調用它們時通常不必考慮函數調用方 式的問題。而普通 DLL 有可能導出「非 stdcall 調用方式」 (比如 cdecl)的函數,調用時需要特別注意。一般而 言,考慮到通用性,DLL 開發者都會選擇導出以 sdtcall 方式調用的函數。 (支持生成 DLL 的編程語言通常都支 持導出 stdcall 調用方式的函數,具體實現請參考各編程語言手冊。 ) 特別地,在 VC 中類似如下代碼導出的函數並非 stdcall 調用方式: extern "C" __declspec (dllexport) test(int a, int b) { return (a + b); } 要想該函數被易語言調用,應該按類似如下方式定義(並在.def 文本中聲明導出) : int WINAPI test (int a, int b) { return (a + b); }易語言編譯生成的 DLL, 其導出函數全部為 stdcall 調用方式, 所以在易語言中調用易語言生成的 DLL 不存 在問題。位元組對齊的結構(自定義數據類型) 目前在易語言中調用 DLL 時只支持 1 位元組對齊的結構(自定義數據類型) 如果 DLL 命令的某個參數或參數的某個成員是結構類型(自定義數據類型) ,則其對齊方式必須是 1 位元組 對齊。Windows 系統 API 中所用到的結構都是 1 位元組對齊的,故在調用 API 時不受此限制。但如果想用其它編 程語言生成 DLL 供易語言調用且數據類型中包含了 1 或 2 位元組數據長度的成員(如字元型或短整數) ,就需要 考慮結構的 1 位元組對齊。 在 VC 中,可以這樣定義 1 位元組對齊的結構(結構在 C/C++中稱為 struct) : #pragma pack (push, old_value) #pragma pack (1) //保存VC++編譯器結構對齊位元組數。 // 設置為以一位元組對齊。struct xxx{ byte a; int b; double c; };#pragma pack (pop, old_value) // 恢復 VC++編譯器結構對齊位元組數。在 Delphi 中,可以這樣定義 1 位元組對齊的結構(結構在 Delphi 中稱為 record) : type xxx = packed record a: byte; b: integer; c: double; end; 在其它編程語言或編譯器中的定義方式請參考各自的編程手冊。目前易語言支持調用任意復雜的 目前易語言支持調用任意復雜的 DLL 命令 只要滿足了前面的兩個條件——調用方式為 stdcall,參數結構為 1 位元組對齊——易語言支持調用任意復雜 的 DLL 命令:參數除了可以是基本數據類型或普通結構類型外,還可以是基本類型地址或基本類