none
openFileDialogのファイル名⇒DLLへ RRS feed

  • 質問

  • 毎度、お世話になっております。

    現在、Win32アプリケーションでDLLを作成しているのですが、

    WindowsフォームアプリケーションのopenFileDialogで取得したファイル名をwin32アプリケーションのDLLへ渡すにはどのような形で渡せばよろしいのでしょうか?

    DLL側の関数を

    void FILE_OPEN(System::String^ filename);

    にして渡したいと思うのですが、System::String^の使い方を理解していないため、作成することができません。

    参照設定に何か追加すれば、できるのでしょうか?

    また、System::String^ ではなく、charへ型変換して渡さないといけなかったりするのでしょうか?

    1から10まですべてを聞きながらの作成で大変、申し訳ないのですが、どなたか分かる方がいらっしゃいましたら、回答をお願いします。

     

     

    2007年1月17日 1:21

回答

  • Win32 DLLで

    void FILE_OPEN(System::String^ filename);

    のような宣言は出来ませんよ。

    Win32の型で受け取れるようにしなければなりません。
    たとえば一番普通なのは (Excelのタイプライブラリを使うのを前提とするのであれば)LPCWSTR でしょうか。
    (COMの文字列はBSTRです。)

    (Windows フォームアプリケーション側で*.libでリンクさせる場合)
    よって、DLL側は

    void FILE_OPEN(LPCWSTR filename);
    もしくは
    void FILE_OPEN(const wchar_t* filename);

    ※実際に使うときは_bstr_tを要求する引数に対してはそのまま指定しても
    問題ないでしょう。たとえば、

    pWorkbooks->Open(filename,・・・

    と指定すれば、内部で_bstr_tがラッピングしてくれる。(_bstr_tの内部でさらにBSTをラッピングする)


    そして、使う側(Windows フォームアプリケーション側)は
    使うときに、String^→LPWSTR変換をして渡す。
    一番楽な変換方法は、vcclr.hのPtrToStringCharsを使う方法。

    pin_ptr<const wchar_t> p = PtrToStringChars(openFileDialog1->FileName);
    FILE_OPEN(p);

    てな感じ。


    別のやり方としてはマーシャラをつかって、BSTR型でやり取りする。

    2007年1月17日 2:07

すべての返信

  • Win32 DLLで

    void FILE_OPEN(System::String^ filename);

    のような宣言は出来ませんよ。

    Win32の型で受け取れるようにしなければなりません。
    たとえば一番普通なのは (Excelのタイプライブラリを使うのを前提とするのであれば)LPCWSTR でしょうか。
    (COMの文字列はBSTRです。)

    (Windows フォームアプリケーション側で*.libでリンクさせる場合)
    よって、DLL側は

    void FILE_OPEN(LPCWSTR filename);
    もしくは
    void FILE_OPEN(const wchar_t* filename);

    ※実際に使うときは_bstr_tを要求する引数に対してはそのまま指定しても
    問題ないでしょう。たとえば、

    pWorkbooks->Open(filename,・・・

    と指定すれば、内部で_bstr_tがラッピングしてくれる。(_bstr_tの内部でさらにBSTをラッピングする)


    そして、使う側(Windows フォームアプリケーション側)は
    使うときに、String^→LPWSTR変換をして渡す。
    一番楽な変換方法は、vcclr.hのPtrToStringCharsを使う方法。

    pin_ptr<const wchar_t> p = PtrToStringChars(openFileDialog1->FileName);
    FILE_OPEN(p);

    てな感じ。


    別のやり方としてはマーシャラをつかって、BSTR型でやり取りする。

    2007年1月17日 2:07
  • 毎度ありがとうございました。

    やっと、検証できました。

    意味までは理解不能ですが完璧でした。

     

    2007年1月18日 4:48