- PR -

DLL同士の通信

投稿者投稿内容
優希
ベテラン
会議室デビュー日: 2003/08/12
投稿数: 92
投稿日時: 2004-02-09 16:10
みなさん、引数をArrayListで渡して、
うまくデータの受信、キャストができました。


以下の書込みについて、
引用:

続いて、
ゆうじゅんさんの書込みですが、
引用:

もしかしてSendDataTbl構造体を両方のDLLで定義してませんか?



もしかしたら、両方で定義していたかもしれません。
ちょっと確認してみます。



今、調べていて、
SendDataTbl構造体を『IWrapDll(インタフェース)』のみに
記述し、送信側、受信側には記述をしないようにしたところ、
うまくいきました。


何日か前に、構造体を引数で渡してやろうとしたときには、
両方のDLL(送信側、受信側)に記述したところ、
コンパイルエラーになって、
『IWrapDll(インタフェース)』のみに記述して、
構造体が引数のときにはうまくいっていました。


それを考えると、
ゆうじゅんさんのおっしゃったように、
「別なものと認識されませんかね 」ってことになったのでしょうか。
もっと早く気づくべき、でしたね (^^;)
申し訳ないです。

みなさんには、いろいろアイデアをもらって
試してみていい経験になりました。
ありがとうございます。
喉に詰まったサカナの骨が取れた感じ、、ですねぇ(^^)/
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2004-02-09 16:10
ほむらです。
--------
優希氏へ
引用:

・・・ということは、
インタフェースを間に入れると
何らかの影響で受け取り不可になるんですかねー(^^;)


みたいですね〜。
インターフェイスの取得方法に問題があるのか、
それとも、別のところに問題があるのかがわかりませんけど^^;;;;

Jitta氏のいうCreateInstance()が悪さしていると仮定して。。。

<適当>
#.NETでプログラムしたことないので
#同じ事をしているようならば読み捨ててください
IWrapDll *wrapInst = dynamic_cast<IWrapDll*>(asmb->CreateInstance(strClsName));

IWrapDll *wrapInst = dynamic_cast<IWrapDll*>(asmb->GetType(strClsName));
とかしてみるとか?
</適当>

ちなみに、元ネタはAssembly::LoadFromのヘルプででいたサンプルを元にして考えています。
コード:
[C++] 
Assembly* SampleAssembly;
SampleAssembly = Assembly::LoadFrom(S"c:\\Sample::Assembly.dll");
// Obtain a reference to a method known to exist in assembly.
MethodInfo* Method = SampleAssembly->GetTypes()[0]->GetMethod(S"Method1");
// Obtain a reference to the parameters collection of the MethodInfo instance.
ParameterInfo* Params[] = Method->GetParameters();
// Display information ab->Item[Out] method* parameters.
// Param = sParam1
//   Type = System::String
//   Position = 0
//   Optional=False
IEnumerator* myEnum = Params->GetEnumerator();
while (myEnum->MoveNext()) {
   ParameterInfo* Param = __try_cast<ParameterInfo*>(myEnum->Current);

   Console::WriteLine(S"Param= {0}", Param->Name);
   Console::WriteLine(S"  Type= {0}", Param->ParameterType);
   Console::WriteLine(S"  Position= {0}", __box(Param->Position));
   Console::WriteLine(S"  Optional= {0}", __box(Param->IsOptional));
}

優希
ベテラン
会議室デビュー日: 2003/08/12
投稿数: 92
投稿日時: 2004-02-09 16:12
ほむらさん、
サンプルありがとうございます。
同時に書込みしてしまったようですね。

無事、解決いたしました。(^^;)
【参照】投稿日時: 2004-02-09 16:10


[ メッセージ編集済み 編集者: 優希 編集日時 2004-02-09 16:13 ]

[ メッセージ編集済み 編集者: 優希 編集日時 2004-02-09 16:15 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-09 16:20
引用:

ゆうじゅんさんの書き込み (2004-02-09 15:18) より:

もしかしてSendDataTbl構造体を両方のDLLで定義してませんか?


 それは思いもしなかった。いや、考えないようにしていたかも。。。う〜ん、こういうのが、やっぱり楽しい。



 何はともあれ、無事解決おめでとうございます。
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2004-02-09 16:29
ほむらです。
-----
優希氏へ
うまくできてよかったですね〜
しかし、原因は思いもしませんでした^^;;;
ゆうじゅん氏の言葉がなかったらそのまま謎で終わってしまっていたかも(感謝)

.NETになってネームスペースが普通になったから
二重定義エラーが出なくなったということですかね〜
僕も作るようになったら気をつけます。。。

#この認識まちがっていたらつっこみヨロです。
隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2004-07-05 16:01
半人前です。
ほぼ半年前に議論されていたものをほじくりかえすようで恐縮なのですが・・・

引用:

Jittaさんの書き込み (2004-02-04 10:01) より:
 なお、.NETのセキュリティがかかるようですが、同じコンピュータのディレクトリからロードされたアプリケーションドメイン間なら問題ないでしょう。



Jittaさんが仰られている「.NETのセキュリティがかかるようですが」とは、この文の
前後から「異なるコンピュータ同士のアプリケーションドメイン」に対してセキュリテ
ィがかかる、という事を言わんとしていると捉えていいのでしょうか?

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-07-05 16:17
引用:

半人前さんの書き込み (2004-07-05 16:01) より:

Jittaさんが仰られている「.NETのセキュリティがかかるようですが」とは、この文の
前後から「異なるコンピュータ同士のアプリケーションドメイン」に対してセキュリテ
ィがかかる、という事を言わんとしていると捉えていいのでしょうか?


 文意はそうですが、.NET Frameworkの仕様(?)では、セキュリティ設定で制御されます。デフォルトは、「自コンピュータ以外」です。ただし、ノータッチや共有ディレクトリから実行したアプリケーションが、自分の出所にアクセスすることは、セキュリティ例外を発生させません。

 @ITにも記事がありますので、読み直してください。
隣の古柴
ベテラン
会議室デビュー日: 2004/06/04
投稿数: 94
投稿日時: 2004-07-05 17:14
半人前です。申し訳ありません。。。

引用:

 文意はそうですが、.NET Frameworkの仕様(?)では、セキュリティ設定で制御されます。デフォルトは、「自コンピュータ以外」です。ただし、ノータッチや共有ディレクトリから実行したアプリケーションが、自分の出所にアクセスすることは、セキュリティ例外を発生させません。

 @ITにも記事がありますので、読み直してください。



私の読解力に問題があるということは間違いないのですが(汗
.NETのSDK中にそれっぽい記述を見つけることができずに右往左往中です。
もしタイトル覚えていらっしゃったらお教え頂けないでしょうか(((((^^;

スキルアップ/キャリアアップ(JOB@IT)