C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: C++のDLLをC#で使う


(過去ログ 128 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■76018 / inTopicNo.1)  C++のDLLをC#で使う
  
□投稿者/ たくや (1回)-(2015/05/24(Sun) 16:33:32)
たくや さんの Web サイト

分類:[.NET 全般] 

今現在
http://www.nikko-ew.co.jp/cti/download.html
でDLしたC++のDLLを使用してナンバーディスプレイの値を取得しようと考えています。

ソースはDLL行の丸印をクリックするとダウンロードできます。
「アロハDLL ユーザーズ・マニュアル_第4.0版.doc」の中にDLL内で宣言されている関数が見ることができます。

例えば19-20ページの用にAloha_Callback_t変数やvoid*などといった変数をどのように宣言していけばいいのか
わかりません。
WPARAMのような変数であればstringと書けばいいのだろうと思うのですかわかる方いらっしゃったら教えていただけ
ないでしょうか。

C#で使うにはどのようにしたらよいのでしょうか。
引用返信 編集キー/
■76019 / inTopicNo.2)  Re[1]: C++のDLLをC#で使う
□投稿者/ Azulean (486回)-(2015/05/24(Sun) 17:24:09)
2015/05/24(Sun) 20:12:09 編集(投稿者)

※憶測を書いていた部分を削除

No76018 (たくや さん) に返信
> 例えば19-20ページの用にAloha_Callback_t変数やvoid*などといった変数をどのように宣言していけばいいのか
> わかりません。

Callback は「EnumWindows を C# で使うにはどうすべきか?」で学んでいただくのが一手でしょう。
void* は IntPtr になることも多いですが、状況次第です。「イベントハンドラへ渡す追加引数」ということですし、あなたが必要なければ IntPtr.Zero、必要なら何か IntPtr で意味のあるものを渡すということになるでしょう。


> WPARAMのような変数であればstringと書けばいいのだろうと思うのですか

逆になぜそう思ったのか聞いてみたいぐらいです。
WPARAM は C# だと IntPtr を当てるのがまっとうで、string に当てられるかは関数によります。
引用返信 編集キー/
■76021 / inTopicNo.3)  Re[1]: C++のDLLをC#で使う
□投稿者/ kiku (52回)-(2015/05/25(Mon) 12:41:36)
下記は参考になりませんでしょうか?

https://msdn.microsoft.com/ja-jp/library/5zwkzwf4(v=vs.110).aspx
引用返信 編集キー/
■76022 / inTopicNo.4)  Re[2]: C++のDLLをC#で使う
□投稿者/ 774RR (256回)-(2015/05/25(Mon) 13:03:00)
相互リンクっつことで
http://dixq.net/forum/viewtopic.php?f=3&t=16644

引用返信 編集キー/
■76023 / inTopicNo.5)  Re[3]: C++のDLLをC#で使う
□投稿者/ たくや (4回)-(2015/05/25(Mon) 13:36:49)
たくや さんの Web サイト
考えてみましたがやっぱりまだわかりません。

メソッドにコールバック関数を渡すというイメージがどうしても頭に入ってきません。
引用返信 編集キー/
■76025 / inTopicNo.6)  Re[4]: C++のDLLをC#で使う
□投稿者/ 774RR (257回)-(2015/05/25(Mon) 14:19:29)
C の経験はどれくらいあるの? qsort() とか使ったことある?
C# の経験はどれくらいあるの?「イベントハンドラ」はコールバックの一例なんだけど。

もし初心者なら、いきなり manage/unmanage の境界面に入るようなソフトは難しいと思うぞ。
両方の詳細に理解が薄いままに手を出すとどうにもならない代物だ。
なんか理解が怪しそうだし、俺なら今その辺に手を出すのはお勧めしない。
もうちょっと知識と経験をつんだほうが話が早いと思う。

引用返信 編集キー/
■76026 / inTopicNo.7)  Re[5]: C++のDLLをC#で使う
□投稿者/ たくや (5回)-(2015/05/25(Mon) 17:15:42)
たくや さんの Web サイト
No76025 (774RR さん) に返信
> C の経験はどれくらいあるの? qsort() とか使ったことある?
> C# の経験はどれくらいあるの?「イベントハンドラ」はコールバックの一例なんだけど。
>
> もし初心者なら、いきなり manage/unmanage の境界面に入るようなソフトは難しいと思うぞ。
> 両方の詳細に理解が薄いままに手を出すとどうにもならない代物だ。
> なんか理解が怪しそうだし、俺なら今その辺に手を出すのはお勧めしない。
> もうちょっと知識と経験をつんだほうが話が早いと思う。
>

Cは皆無に近いぐらいで、C++も基礎のクラス等がわかる程度です。
C#はそれなりにできます。
この件がそれ程レベルが高いとは気づきませんでした。

DLLの中にソースが入っているのですが、C++のソースを読むと何がなんだかわからなくなる次第です。
引用返信 編集キー/
■76028 / inTopicNo.8)  Re[6]: C++のDLLをC#で使う
□投稿者/ 774RR (258回)-(2015/05/25(Mon) 18:09:56)
コールバックってのはこの場合
・初期化時点でライブラリ関数に自作関数への関数ポインタ( C# 的には delegate )を渡すと
・特定条件が成立したとき (たとえば Plug&Play イベント成立時)
・その自作関数が DLL の内部にある関数や Windows 自体から呼ばれる
ってこと。
つまりその「特定条件」が成立しない間はまったく何もしなくていい=負荷0という便利機構。

C (unmanage) だけ C# (manage) だけならぜひ続けてみようと言うところなんだけど、今回の案件は
manage コードである C# の関数を、 unmanage コードである DLL から callback で呼びたい
わけで、内容をきっちり理解した上でやらないとはまるパターン。

あとぱっと当該マニュアルなるものを見た時点で
・ C 側が char 使ってる (manage で使うことは微塵も想定していない可能性が大)
・ OEM 文字セットを使っていると書かれている (UNICODE にするには変換が必要)
(OEM 文字ってのが電話機にしかない文字の可能性があって Marshaller が使えないかも)
# CP932 にあって UNICODE に無い文字ってあったっけ?

とあってオイラだったら手を出さない系の代物だ。

そのライブラリのメーカがまだ公開してないだけで、
メーカ社内には manage コード向けのライブラリがこっそりあるかもしれないよ
ということでまずはメーカーに直接問い合わせてみるほうを推奨したい。

引用返信 編集キー/
■76029 / inTopicNo.9)  Re[7]: C++のDLLをC#で使う
□投稿者/ たくや (6回)-(2015/05/25(Mon) 18:32:39)
たくや さんの Web サイト
No76028 (774RR さん) に返信
> コールバックってのはこの場合
> ・初期化時点でライブラリ関数に自作関数への関数ポインタ( C# 的には delegate )を渡すと
> ・特定条件が成立したとき (たとえば Plug&Play イベント成立時)
> ・その自作関数が DLL の内部にある関数や Windows 自体から呼ばれる
> ってこと。
> つまりその「特定条件」が成立しない間はまったく何もしなくていい=負荷0という便利機構。
>
> C (unmanage) だけ C# (manage) だけならぜひ続けてみようと言うところなんだけど、今回の案件は
> manage コードである C# の関数を、 unmanage コードである DLL から callback で呼びたい
> わけで、内容をきっちり理解した上でやらないとはまるパターン。
>
> あとぱっと当該マニュアルなるものを見た時点で
> ・ C 側が char 使ってる (manage で使うことは微塵も想定していない可能性が大)
> ・ OEM 文字セットを使っていると書かれている (UNICODE にするには変換が必要)
> (OEM 文字ってのが電話機にしかない文字の可能性があって Marshaller が使えないかも)
> # CP932 にあって UNICODE に無い文字ってあったっけ?
>
> とあってオイラだったら手を出さない系の代物だ。
>
> そのライブラリのメーカがまだ公開してないだけで、
> メーカ社内には manage コード向けのライブラリがこっそりあるかもしれないよ
> ということでまずはメーカーに直接問い合わせてみるほうを推奨したい。
>

読ませていただきました。
可能性として電話機特有の文字列があって使えない可能性があるってことですね。
その他色々ありました。
manage向けとunmanage向けというのが存在するんですね。
自分には全然想定がつきませんでした。

たぶんメーカーに問い合わせてもお払い箱にされると思いますのでそれは控えようと
思います。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -