|
分類:[VC++(C++/CLI)]
分類:[VC++(C++/CLI)]
いつもお世話になっております。ゆうじです。
CLR クラス ライブラリとMFCアプリケーション間で ファイルマッピングにより通信したいと思いますが、 うまくいきません。
よろしくお願いいたします。
開発環境:VS2005 Professional OS:WinXP SP2
【ソースの構成】 下記の「1.」と「2.」共に同様な、 CreateFileMapping関数でファイルマッピングオブジェクトを作成しています。
<1.VB.NET WindowsアプリケーションからCLRクラス ライブラリの参照> ソリューションに下記のプロジェクトを追加しています。 ※以下は作成した手順です。 1−1. VB.NET→Windows→Windowsアプリケーション 1−2.Visual C++→CLR→クラス ライブラリ
1−1. →1−2.で参照設定しています。
・1−2.のクラス内のソース抜粋 HANDLE クラスA::CreateMemMap(char* lpName) { HANDLE hCreate; hCreate = ::CreateFileMapping( (HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, 10*256, (LPCWSTR)lpName );
return hCreate; }
<2.MFCアプリケーション> ソリューションに下記のプロジェクトを追加しています。 2−1.MFCアプリケーション
・2−1.のクラス内のソース抜粋 void クラスB::CreateMemMap(HANDLE &hCreate, LPCTSTR lpName) { hCreate = ::CreateFileMapping( (HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, 10*256, lpName ) ; }
【現象】 1−2.と2−1.で通信できない。 引数lpNameが同じなのに(他の引数も同じ)CreateFileMappingの戻り値が、 まったく違う値になるため通信できない。
MSDNには、「戻り値」の欄に、 「指定したファイルマッピングオブジェクトが既に存在していた場合は、 既存のファイルマッピングオブジェクトのハンドルが返ります。」 と記載されているため、同じ戻り値といなるはずなのですが・・・。
【質問】 私の推測では引数lpNameの文字コードなどの問題なのでしょうか? 私の技量では解決できませんでしたが・・・。
また、この場合、現在通信内容が増えた場合2箇所修正しなければならないので、 MFCアプリケーション側でも、CLR クラス ライブラリを 共通で参照したほうが良いのでしょうか? MFCアプリケーションからCLR クラス ライブラリを参照する方法も 教えていただければ、非常にありがたいです。
いつも質問だらけで申し訳ございませんが、 ご教示のほどよろしくお願いいたします。
|