※ 引述《pig750221 (pig)》之銘言:
: ※ [本文轉錄自 C_and_CPP 看板]
testdll.CPP
--------------------
#include "stdafx.h"
#include "testdll.h"
int funadd(int a, int b)
{
return (a+b);
}
testdll.h
---------------------
#ifndef TESTDLL_H
#define TESTDLL_H
#ifdef DLL_EXPORT
#define DLLAPI __declspec(dllexport)
#else
#define DLLAPI __declspec(dllimport)
#endif
#ifdef __cplusplus
extern "C" {
#endif
DLLAPI int funadd(int a, int b);
#ifdef __cplusplus
}
#endif
#endif
以下是vb.net
<DllImport("testdll.dll", CallingConvention:=CallingConvention.Cdecl)> _
Public Shared Function funadd(ByVal a As Int32, ByVal b As Int32) As integer
End Function
這樣就能用了
以上的是vc2008跟vb2008
vba能不能用我就不曉得了
: 作者: pig750221 (pig) 看板: C_and_CPP
: 標題: [語法] Excel 中使用C++作的DLL 出現錯誤
: 時間: Wed Aug 19 15:35:01 2009
: 小女子現在在研究在Excel VBA中使用C++作成的DLL
: Google了老半天也照上面的方法弄但是一直出現錯誤
: 版上的文章也有研究過了,不過沒有能夠解決我的問題
: 我現在要從VBA傳一個數值矩陣到DLL
: 照著網路上這是我在C++的寫法
: void test1(double *data,double *summary){
: summary[0] = data[0]+data[1];
: summary[1] = data[0]+data[1];
: summary[2] = data[1]+data[2];
: summary[3] = data[3]+data[3];
: }
: 也有試過在void後面和前面都加上 __stdcall
: 不過結果一樣@@
: VBA這樣子宣告
: Private Declare Function test1 _
: Lib "D:\TEST.dll" _
: (ByRef data As Double, ByRef summary As Double)
: Function ABC()
: Dim data() As Variant
: Dim summary() As Variant
: ReDim data(4)
: ReDim summary(4)
: data(0) = Cells(1, 1)
: data(1) = Cells(1, 2)
: data(2) = Cells(1, 3)
: data(3) = Cells(1, 4)
: test1 data, summary
: Cells(2, 1) = summary(0)
: Cells(2, 2) = summary(1)
: Cells(2, 3) = summary(2)
: Cells(2, 4) = summary(3)
: End Function
: 我在VC++編譯有過
: 可是在VB中使用的時候一直不能使用
: 問題是出在傳進去DLL引數的時候嗎?
: 麻煩各位好心人解救一下在C++要怎麼寫才能讓其他程式正確的使用
: 謝謝
--
"◢██◣ 呼呼呼~ 為什麼…我這麼愛你…
↙操B跑車 " ,█◥◥◥ ˊ 對不起,他有車。 ˋ ◢██◣
▄◣ ◤ ◎ ◎ ◣◢██◣ˊ █◥◥◥▌
◣◥◣ ◥ ▼◤ ▉█◥◥◥ ◤ ▇ ▇◤
██████ ◣ ╲██◣ ▉◤ ▄ ▄ ◥ █▲◤
██◤▄◥█▃ ◢ █▃●╲ ◤╲█"█◤ g121630作 ◢ ◣ ◣
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.42.153.115