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

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

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

CLR クラス ライブラリとMFCアプリケーション間でファイルマッピング


(過去ログ 7 を表示中)

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

■7435 / inTopicNo.1)  CLR クラス ライブラリとMFCアプリケーション間でファイルマッピング
  
□投稿者/ ゆうじ 軍曹(65回)-(2006/10/11(Wed) 16:50:21)

分類:[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 クラス ライブラリを参照する方法も
教えていただければ、非常にありがたいです。

いつも質問だらけで申し訳ございませんが、
ご教示のほどよろしくお願いいたします。


0
引用返信 編集キー/
■7436 / inTopicNo.2)  Re[1]: CLR クラス ライブラリとMFCアプリケーション間でファイルマッピング
□投稿者/ Blue 准尉(104回)-(2006/10/11(Wed) 17:03:26)

分類:[VC++(C++/CLI)] 

>私の推測では引数lpNameの文字コードなどの問題なのでしょうか?
>私の技量では解決できませんでしたが・・・。
多分そうでしょう。

VC2005ではデフォルトがUnicodeになったので、、、
とちょっと長くなるので、
http://cgi21.plala.or.jp/keny01/patio_32/patio.cgi?mode=view&no=250
を参考にしてください。

>(LPCWSTR)lpName
最低最悪のキャストです。
こんなキャストするならば、CreateFileMappingAを明に呼んでください。


>MFCアプリケーションからCLR クラス ライブラリを参照する方法も
>教えていただければ、非常にありがたいです。
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=671312&SiteID=7
を参考にしてください。
但し、クラスライブラリのCLRプロジェクトは試していませんのでもしかしたらエラーがでるかも。


0
引用返信 編集キー/
■7439 / inTopicNo.3)  Re[2]: CLR クラス ライブラリとMFCアプリケーション間でファイルマッピング
□投稿者/ ゆうじ 軍曹(66回)-(2006/10/11(Wed) 17:41:44)

分類:[VC++(C++/CLI)] 

Blueさん返事ありがとうございます。

> VC2005ではデフォルトがUnicodeになったので、、、
> とちょっと長くなるので、
> http://cgi21.plala.or.jp/keny01/patio_32/patio.cgi?mode=view&no=250
> を参考にしてください。
大変わかりやすい説明で理解できました。
ありがとうございました。

また、下記コードで通信できることを確認いたしました。
hCreate = ::CreateFileMappingA( (HANDLE)0xFFFFFFFF,
NULL, PAGE_READWRITE, 0, MEMMAP_EVALCEPH_LENGTH, (LPCSTR)lpName );


> >MFCアプリケーションからCLR クラス ライブラリを参照する方法も
> >教えていただければ、非常にありがたいです。
> http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=671312&SiteID=7
> を参考にしてください。
> 但し、クラスライブラリのCLRプロジェクトは試していませんのでもしかしたらエラーがでるかも。
ありがとうございました。
DLL対応も検討してみます。



解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -