
こんにちは。
自作DLLをエクセルVBAで使用したいのですが、知識不足でうまく動かせません。どうぞお知恵をお貸しください。
例えば足し算をするCのプログラムを以下のように作ります。ファイル名は"wa.c"とします。
#define EXPORT __declspec(dllexport) __stdcall
EXPORT double wa(double a,double b)
{
return(a+b);
}
これをコンパイルして、DLLファイル"test.dll"を作ります。
gcc -shared -o test.dll wa.c
エクセルVBAのモジュールには次のように記述しました。
Declare PtrSafe Function wa Lib "test.dll" (ByVal a As Double, ByVal b As Double) As Double
ここで作成した関数をワークシート関数として呼び出したいのですが、ワークシート上での返り値は常にゼロになってしまいます。例えば、ワークシートのセルに"=wa(1.2,3.5)"と記入すると、"4.7"を返してほしいところですが、ゼロとなってしまいます。ワークシート関数として正しく動作させるにはどうしたらよいでしょうか?
ちなみに、この関数をエクセルVBAのサブルーチンで使うことはできます。例えばこんな感じです。
Sub test()
x = 1.2
y = 3.5
Call MsgBox(wa(x, y))
End Sub
また、上記の"test.dll"を他のCのプログラムから呼び出すことも正しくできます。
なお、64bitのエクセルを使っています。Cのコンパイラも64bitです。
どうぞよろしくお願いいたします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
取り合えず、DLL側で引数を受け取れているのか、OutputDebugStringとsprintf(でなくてもいいけど)で、
デバッガ(DebugView等)に出力して確認するとか。
(または、MessageBox)
---
mitarashiさんのリンクされているスレッドの質問者さんのコードは、
> Rtn = Rtn + p{i];
コンパイラを通らないのでは。
No.3
- 回答日時:
#1です。
すみませんが、回答では無いです。
#1の最初のリンクは、末尾のhtmlが、htmになっているために全く別のところにリンクしてしまっているので、再掲します。
http://oshiete.goo.ne.jp/qa/5622852.html
こちらも本件に直接関係無いですが、別のQAの関係で見つけたので載せておきます。
http://supermab.com/wp/excel-dna-%E3%82%92%E4%BD …
ご参考にはならないでしょうが、話の種に...
No.1
- 回答日時:
こちらがお役に立つかもしれません。
http://okwave.jp/qa/q5622852.htm
リンク先は健在でした。
http://www.codeproject.com/Articles/17733/A-C-DL …
当時のサンプルはあまり機能を生かしていると思えないものでしたが、現状は確認しておりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
実行時エラー'1004': WorkSheet...
-
excelのマクロで該当処理できな...
-
特定の文字を含むシートだけマ...
-
エクセルVBA Ifでシート名が合...
-
VBA ThisWorkbookはSheet*で記...
-
ワークシートを追加したときの...
-
【Excel VBA】Worksheets().Act...
-
エクセルのひとつのシートへの...
-
Excel VBA リンク先をシート...
-
C#でExcelのシートを選択する方法
-
ExcelのVBAのマクロで他のシー...
-
Worksheet_Changeの内容を標準...
-
『実行時エラー'1001': 'Range...
-
【ExcelVBA】全シートのセルの...
-
VBAで同じシート名のコピー時は...
-
Excel VBA での計算について…
-
エクセルのマクロでアクティブ...
-
ExcelのデータをJavaの配列に格...
-
Excel VBA で自然対数の関数Ln...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
実行時エラー1004「Select メソ...
-
特定の文字を含むシートだけマ...
-
XL:BeforeDoubleClickが動かない
-
【ExcelVBA】全シートのセルの...
-
実行時エラー'1004': WorkSheet...
-
ユーザーフォームに入力したデ...
-
【Excel VBA】Worksheets().Act...
-
エクセルVBA Ifでシート名が合...
-
Excel チェックボックスにチェ...
-
シートが保護されている状態で...
-
Excel VBA リンク先をシート...
-
ブック名、シート名を他のモジ...
-
ExcelのVBAのマクロで他のシー...
-
同じ作業を複数のシートに実行...
-
エクセルのシート名変更で重複...
-
VBA 検索して一致したセル...
-
【VBA】色のついたシート名を取得
-
VBAで指定シート以外の選択
おすすめ情報