Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


32804 / 76734 ←次へ | 前へ→

【49163】構造体でDLLに値を渡す方法
質問  パンチ  - 07/5/25(金) 17:51 -

引用なし
パスワード
   初めまして、パンチと申します。

計算を速くするために、EXCEL(VBA)からVC++2005で作ったDLLに値を投げて、計算結果をEXCEL上に投げ返すプログラムを作っています。
例えば、EXCELでa=1,b=2を定義して、DLLからa+bの値を返すようなプログラムは、過去レスを参考にして以下のように作れました。

**VBA側**
Declare Function TEST Lib "test.dll" Alias "?TEST@@YGNNN@Z"; (ByVal a As Double, ByVal b As Double) As Double

Public Sub sum()
  
  Dim a As Double
  Dim b As Double
  a = 1
  b = 2
  
  Cells(1, 1).Value = TEST(a, b)
  
End Sub


**DLL側**(関数の所だけを示しています))
__declspec (dllexport) double WINAPI TEST(double a,double b)

{
    double c;
    c=a+b;
    return c;
}

しかし、これでは値が一つ(c)しか帰ってこないため、複数の値(例えば、c=a+bとd=a-bなど)を返すようなプログラムを作りたいと思っています。
たぶん構造体を使って書くんだろうと思いまして、
microsoft.com/japan/msdn/columns/office/office03082001.aspx
「DLL 関数にユーザー定義型を渡す」
を参考に作ったのですが、以下のプログラムではRecord.c=Record.d=0となって返ってきてしまいます。
こういった方法をご存じの方がいましたら、ご教授いただければと思います。

**VBA側**
Declare Sub Point Lib "point.dll" _Alias "?Point@@YG?AUkouzou@@XZ" (outdata As tei)

Type tei        ' 構造体
  a As Double       
  b As Double
  c As Double
  b As Double
End Type

Public Sub sum()
  Dim Record As tei
  
  Record.a = 1
  Record.b = 2
  
  Point Record 'HPにはこういった書き方で更新されると書いてあるが、本当か?
  
  Cells(1, 1).Value = Record.c
  Cells(2, 1).Value = Record.d
End Sub


**DLL側**(関数の所だけを示しています))

struct kouzou{
    double a ;
    double b ;
    double c ;
    double d ;
}tei;

__declspec (dllexport) kouzou WINAPI Point()

{
    tei.c=tei.a+tei.b;
    tei.d=tei.a-tei.b;
    return tei;
}
3 hits

【49163】構造体でDLLに値を渡す方法 パンチ 07/5/25(金) 17:51 質問
【49182】Re:構造体でDLLに値を渡す方法 neptune 07/5/26(土) 15:35 回答
【49190】Re:構造体でDLLに値を渡す方法 パンチ 07/5/27(日) 5:01 お礼

32804 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free