- - PR -
LPCTSTRデータ型をVC#で受け取る
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-05-18 19:28
なら、最初にそう書きましょうよー 一口に「DLL」つっても何種類かあるので、「どんな」DLLなのかが分からないと、適切なアドバイスができないっす ;-p つまるところ「COMコンポーネントを C# で書いている」わけですね? で要するに、「COMコンポーネントから文字列を返したい」のでしょうか? それとも「COMコンポーネントで文字列を受け取りたい」のでしょうか? _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||||||
|
投稿日時: 2004-05-19 08:31
一応、もう一つの質問に書いてあるのですが、みんながすべての質問をチェックしているわけではないですものね 参照に書いておくなり、「ちょっとした気遣い」は、聞く者答える者、両方に必要ですね。 | ||||||||
|
投稿日時: 2004-05-20 14:51
ご指導ありがとうございます。
書き込み自体が初心者なのでうまく説明できずに、 手間をかけさせてしまい申し訳ありませんでした。 以後、ご指導くださった点に気をつけて分かりやすい 書き込みをしたいと思います。 ありがとうございました。 | ||||||||
|
投稿日時: 2004-05-20 21:02
問題は解決したんでしょうか?
は、結局どっちだったんでしょう? _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||||||
|
投稿日時: 2004-05-21 17:50
引用:
-------------------------------------------------------------------------------- で要するに、「COMコンポーネントから文字列を返したい」のでしょうか? それとも「COMコンポーネントで文字列を受け取りたい」のでしょうか? -------------------------------------------------------------------------------- 「COMコンポーネントで文字列を受け取りたい」方です。 問題は解決したというより、妥協しました。 VC++6.0からVC#に直接受け渡したかったのですが、 うまくいかないので.NETのVC++で受け取ることにしました。 | ||||||||
|
投稿日時: 2004-05-21 18:32
C# で文字列を受け取るだけなら public void Hoge(string str); でOKです。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||||||
|
投稿日時: 2004-05-22 00:12
は、IDL 的には HRESULT Hoge(BSTR str); という形式になります。 これが常道ですが、大本の投稿には「LPCSTR を。。。」とありました。 もしこれが「IDL を見ずに、MFC で実装された COM オブジェクトの C++ ソースコードだけを見ている」発言したものだとすると、C# では↑の記述で問題ありません。 が、もし、IDL 的に HRESULT Hoge(LPCSTR str); なんて形式のメソッドを本気で求めているとしていたら、先に示したコードでは駄目です。 ですが、LPCTSTR は OLE オートメーション互換型では無いため、本来は回避するべき設計です。以前にも「BSTR を使ってみてはどうか?」というコメントがあったように、仕様の見直しをするべきです。 それでも、どーしても仕様の変更が難しい場合は unsafe public void Hoge(byte* str); とでもすればよいんじゃないでしょうか。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||||||
|
投稿日時: 2004-05-22 00:16
もう遅いかもしれませんが。
.NET Framework のヘルプによると
だそうです。なので厳密には LPCTSTR 型の文字列を C# 側で受け取ることはできません。 ただし、動作環境を NT 系(Windows NT4/2000/XP/2003)に限定すれば LPCTSTR は LPCWSTR と同値になりますので、
のようにすれば取得できると思います。 補足 デフォルトでは、string は BSTR 型に変換(マーシャリング)されるようなので、MarshalAs 属性で LP(C)WSTR 型であることを示さないと多分うまくいかないと思います。試したことがないので何とも言えませんが。 |