- - PR -
ネイティブコードのDLLへの参照渡しの方法(文字列型)
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-02-09 19:25
いつもお世話になります。
優希です。 今回もまたDLL絡みなのですが、 もしかしたら自分の知識不足なのかもしれません。 何卒、アドバイスをお願い致します。 内容は、 ネイティブコードで作成されたDLLを呼び出すものです。 ただ単に呼び出すのは良いのですが、 VC++.Netにおける『参照渡し』の仕方について お聞きしたいと思います。 # C#では分かりやすいし、 # 参考記事も多く見かけるんですが・・・。 呼び出されるDLLを"Sample.dll"としますと、 そのなかでは、以下のような 「渡した数値を、2つの形式の数値文字列に変換する関数」 があるとします。
この関数をマネージドコード内で使用するとします。
ということをしたいのです。 (ある数値を、決まっている数値型文字列として、値を返す) ここで、GetData()関数の第2引数、第3引数は、 『参照渡し』である必要があります。 が、MSDNの"Stringクラス"のサイトには 以下のように書いてあります。
実際にやってみてもそうなのですが、 値が取得できない状態です。 C#だと、refを使うと、 可能なのかと思うのですが・・。 (もしかしたら、出来ないかもしれないですけど(^^;)) 何か有効な手段はありますでしょうか? 宜しくお願い致します。 # ちなみに、Sample.dllの内容は、 # 変更したくないので、呼び出し側で # 対応できたら、、と思っています。 | ||||||||||||
|
投稿日時: 2004-02-09 19:30
諸農です。
直接の回答ではないです。 「ひらがなをカタカナに自動的に変換する。」のトピックで C#を使ったWin32API呼び出しで、文字列の参照渡しのサンプルをアップしました。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=7712&forum=7 参考になればよいのですが。 _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||||||
|
投稿日時: 2004-02-09 19:56
諸農さん、
ありがとうございます。 自分でも、 StringBuilderクラスを使用してみたのですが、 うまくいきませんでした。 その関数が呼ばれてたところで、 以降の処理が行なわれない状態になってしまいます。 ちなみに、下記のソースで、
一度、nullを渡してその戻り値を、 StringBuilderクラスのインスタンス生成時に使用しているのは、 何か意味があるのでしょうか? # 上記のようにやってみても、 # うまくいきませんでした。。。 | ||||||||||||
|
投稿日時: 2004-02-09 20:25
優希です。
VC++とVBでも やり方は同じですよねぇ? 下記の記事も見て見ましたが・・・。 【Insider.NET 会議室】VC++の関数からVB.NETで文字列を受け取る方法 "LPSTR"型も String型、またはStringBuilder型でいいはずなのですが・・・。 | ||||||||||||
|
投稿日時: 2004-02-09 20:52
諸農です。
え?えっとですね。。(^_^; 「参照渡し」で関数呼び出しするので、関数に渡すバッファを確保するための 必要なサイズを取得するためなんですが。。。。 #当たり前の回答で申し訳ない で、ちなみに、nullに意味があるのではなく、 引き渡すサイズ用のパラメータに意味があるんです。 MSDNの「ImmGetCompositionString」の説明より引用 「バッファにコピーしたデータのバイト数が返ります。 dwBufLen パラメータに 0 を指定した場合は、要求し た情報をすべて受け取るために必要となるバッファサイ ズ( バイト単位)が返ります。エラーが発生すると、 次のいずれかのエラー値が返ります。」 _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||||||
|
投稿日時: 2004-02-09 21:04
優希です。
そうなんですねー。 サイズ取得の為なんですね。 納得しました。 うーん。 Sample.dllのGetData()関数の引数で、 "LPSTR"型であったところを、"char *"型に 変えて呼び出して見たのですが、 同じような現象ですねぇ。 ですので、 明日、GetData()のどこでエラーになっているのか、 またはきちんと来ているのかを 検証してみる予定です。 | ||||||||||||
|
投稿日時: 2004-02-09 21:10
諸農です。
Stringをアドレス渡ししてもダメなんですか? もしくは__pinで固定してからアドレス渡しするとか・・ #試せていませんが(^_^; _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||||||
|
投稿日時: 2004-02-10 00:08
今簡単に実験してみましたけど、StringBuilderでいけましたよ。
--------- Sample.dll プロジェクト ------------ Sample.cpp
export.def
---------------------------------------------- ---------- test.exe プロジェクト -------------
---------------------------------------------- これで「abcdef」と表示されました。 それにしてもアップローダーがほしいですね…。 追記:単純な疑問ですが、MC++使うのならば普通にlibファイルやLoadLibraryでリンクすればいいように思うんですけど、なんか事情があるんですか? [ メッセージ編集済み 編集者: ya 編集日時 2004-02-10 00:25 ] |
1|2|3
次のページへ»