• ベストアンサー

VBAからDLL呼び出し

vbaからC++で作成したDllファイル内関数を呼び出し、使用しているのですが、dllファイル内に記述してあるprintfが出力できません。 何か良い方法があるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 printfとは、「標準出力に対して文字列を出力する」関数であり、当然標準出力がないと何も起こらない。  ところで、VBAは何のVBAを使っているのだろうか? 一般的にはExcelかAccessだと思うのだが・・・・。  正直、VBやVBAからコンソールをオープンするのはめちゃくちゃ面倒だ。APIを駆使して行う事になる。さらに、恐らくそれでもDLLのprintf()は使えない。コンソールをVBAでオープンして、自前でパイプを作りその入力側をDLLに渡してfprintf()に出力してもらう事になるだろうな。

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

printfは、標準出力(特に指定しなければコマンドプロンプトのような画面)に出力する関数ですので標準出力を持たないOffice製品では無理です。 sprintf等を使用してMessageBoxで表示させるとか、fprintfでファイルに出力させる等、別の手段をとってください。

関連するQ&A

  • VBAでDLL呼び出し

    VBAに関する使用方法をお教えください。 例えばsheet1のA1の数値をVBC++で作成したDLLファイル内にある関数に引数として渡したいのですが、どうすればよいでしょうか? (どう記述すればよいのでしょうか) 初心者につき、分かりやすく説明をして頂ければ幸いです。 VBC++で作成したDLLファイル名 testdll.dll testdll.dll内で定義してある関数名はtest_sendです 以上、宜しくお願い致します。

  • 自作DLLをエクセルVBAで使用したい

    こんにちは。 自作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です。 どうぞよろしくお願いいたします。

  • VBAでDLLが見つからないエラー

    CADのVBA(6.0)ですが、DLLが見つからないエラーが出ます ' こっちはエラーが出ない Public Declare Function SearchVBApath Lib _ "C:\Program Files\AppliTool\VB\DDDD.dll" (ByVal env As String, ByVal s As String) As Integer 'こっちだとエラーが出る Public Declare Function SearchVBApath Lib "DDDD.dll" (ByVal env As String, ByVal s As String)    As Integer VBAプロジェクトファイルとDLLは同じフォルダにおいてあります 上記のようにフルパスだとエラーが出ないのですがDLL名だけだとこの関数のところでエラーがでます このDLL関数宣言行の前の方には他のDLL関数も同じようにパス省略で記述しているのですがそちらにはエラーが出ません どなたかヒント下さい、よろしくお願いします。

  • VBAをDLL化する方法を教えてください。

    Excelの中で、UserFormを使用し、グラフを操作するプログラムをVBAで作成しています。 そこで、VBAのソースを見られないようにするために、全てDLL化してだれにでも配信できるようにしたいと考えていますが、どのようにすれば、DLLにできるのかわかりません。 VBAのパスワードだけでは弱いので、DLL化する方法がありましたら、どなたかその方法をご教授願います。

  • DLLを作成してVBAから使用する方法は?

    Visual Basic 2005 Express EditionでDLLを作成して,エクセルVBAから使用する方法を教えてください。 DLLで提供する関数は,仮に Public Function TRIM2(ByVal str1 As String) As String TRIM2 = trim(str1) End Function とします。 DLLの作り方とエクセルVBAでの利用のやり方が判りません。 一応,DLLらしきものを作りエクセルVBAから参照を試みましたが,「指定されたファイルへの参照は登録できません。」というエラーになります。

  • x64ネイティブコードのDLLはVBAから呼びだせない?DLLが見つからない?

    VC+2005でx64ネイティブコードを出力し、DLLを作成したのですが C:\WindowsフォルダにそのDLLを入れて、いつもどおりVBAから呼びだそうとすると、該当するDLLがありません。と表示されます。 同じように置いているのに無いというメッセージが理解できないです。 x86(32bit)で生成したDLLなら問題なく動作するのですが・・・ 何か違いでもあるのでしょうか? Declareとかでは呼べないのでしょうか? ちなみにVBAはExcel2003です。 DLLでなくMFCアプリで完全ネィテイブ.EXEを作らないとx64の環境は生かせないのでしょうか?

  • VBA&c++のデータ受け渡り

    excel VBAを使用し、セルに入っているipアドレスを文字列をc++で作成したDLLファイル内にある関数に引数として渡したいのですが、関数内で確認すると旨く渡っていません。(正しく表示されない) 何か特別な方法やアドバイスが有れば宜しくお願いいたします。 現在の状況は文字列をstringに入れそのアドレスを引数としています。DLL内関数の引数の型はcharのアドレスです。

  • VCで作成したDLLの使用

    VCで作成したDLLの使用 VC6.0で作成されたDLLファイルを使いたいのですが _stdcallで記述されたものではなく DllMainで記述されたものなのですが、 VBから呼び出す事は可能でしょうか? 普通にdeclare functionで呼び出そうとすると、 「エントリfnchogeがDLLファイル hoge.dll内に関数が見つかりません。」 とエラーがでるだけでした。 VB6.0SP3 Windows2000

  • VSC++でDLL出力でのデバックビルド

    VSでデバックする際にC++はprintfなどで出力時に変数の情報の確認などができます。 DLL出力の際は出力した.dllファイルをソフトの場所においてデバッグの確認を取るたのでその場で実行されずprintfなどで変数の情報の確認を取ることができません。 実行時にアプリケーションを自動で立ち上げてデバッグを来ない情報をウィンドウの出力の場所に書き出す方法があったと思うのですがどうにも方法が見つかりません。 出力する.dllファイルの出力先の指定は行いました。 立ち上げるアプリケーション(.exe)の指定をする場所とその他まだ設定しなければならない事があれば教えてください。

  • C#でCのコンソール出力の取得

    C#でCのコンソール出力の取得 Cで作成したDLLをC#で利用しています。このときDLLファイルはC言語のprintfを使用しています。この出力内容を取得して、C#でテキストボックス等に表示する方法はありませんでしょうか。

専門家に質問してみよう