![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
こんにちは。
自作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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
VBA 存在しないシートを選...
-
Excelマクロのエラーを解決した...
-
【ExcelVBA】全シートのセルの...
-
シートが保護されている状態で...
-
エクセルVBA Ifでシート名が合...
-
別のシートから値を取得するとき
-
XL:BeforeDoubleClickが動かない
-
【VBA】シート名に特定文字が入...
-
【Excel VBA】書き込み先のシー...
-
エクセルのシート名変更で重複...
-
セルの値によって、シート見出...
-
実行時エラー'1004': WorkSheet...
-
シート名でファイル検索する
-
VBAを用いて繰り返し自動的...
-
userFormに貼り付けたLabelを変...
-
excelのマクロで該当処理できな...
-
エクセルVBA 変数への代入がう...
-
Excel VBA 複数行を数の分だけ...
-
エクセルの絶対参照の一括操作...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のシートから値を取得するとき
-
excelのマクロで該当処理できな...
-
ユーザーフォームに入力したデ...
-
同じ作業を複数のシートに実行...
-
【ExcelVBA】全シートのセルの...
-
エクセルのシート名変更で重複...
-
特定の文字を含むシートだけマ...
-
ブック名、シート名を他のモジ...
-
実行時エラー'1004': WorkSheet...
-
XL:BeforeDoubleClickが動かない
-
VBA 存在しないシートを選...
-
ExcelのVBAのマクロで他のシー...
-
Excelマクロのエラーを解決した...
-
実行時エラー1004「Select メソ...
-
エクセルのマクロでアクティブ...
-
【Excel VBA】Worksheets().Act...
-
VBA 最終行まで数式をコピーする
-
シートが保護されている状態で...
-
VBAで同じシート名のコピー時は...
-
エクセル・マクロ シートの非...
おすすめ情報