2009-08-04 19 views
3

バイナリファイルに書き込むためにvC++ DLLから関数をエクスポートしています。 C++コードでは、ファイルは、後にファイルを追加し、bはバイナリモードのためのものであるために"a+b"モードを使用してC#とC++のファイルオープンモードの不一致

FILE* fp = ::_tfopen (FilePath, _T("a+b")); 

I使用して開かれます。

私のC#アプリケーションでこの関数をインポートしています。 C#から正しい引数を使ってこの関数を呼び出すと、ファイルは書き込まれますが、追加モードにはなりません。私が意味することは、関数がファイルを開きますが、そのコンテンツに追加するようなことはなく、その内容を破棄して、C#の引数が何であれ書き込むことです。

プラットフォームはVS2005です。助けてください?

- おかげ Viren

コメントからインポート

[DllImport("NameOfTheDLL.dll", CharSet = CharSet.Ansi)] 
public static extern int function_name(IntPtr ptr, 
    [MarshalAs(UnmanagedType.LPWStr)] string FilePath); 

次の関数の呼び出しです:

IntPtr ptr = some_Init_function(); 
function_name(handle, "C:\\FileName"); 
+0

Virenでは、コメントに多くのコードを入れるのではなく、編集ボタンを見つけて質問を追加/修正してください。 –

答えて

2

あなたのC#の機能がどのように見えますか?

意図した通りのC#にインポートされていないとき

FileStream s2 = new FileStream(name, FileMode.Open, FileAccess.Read, FileShare.Read); 
+0

[DllImport( "NameOfTheDLL.dll"、CharSet = CharSet.Ansi)] public static extern int function_name(IntPtr ptr、[MarshalAs(UnmanagedType.LPWStr)] stringファイルパス); 関数の呼び出しは次のとおりです。 IntPtr ptr = some_Init_function(); function_name(ハンドル、C:\\ FileName); – zack

+0

ファイルはC#アプリケーションによって開かれません。だから、私はFileMode.oPENが必要なときは手に入らない。ファイルはC++ dllで開かれています。 私が間違っている場合は、私を案内してください。私はちなみに – zack

+0

をプログラミング.NETに新しいです: のStreamReaderのSR =新しいStreamReaderを(ファイルパス) は私が読むために使用しています何バイナリファイル – zack

0

は、C++の関数作業を行う列挙型を添付してください?問題は、DLL自体のコードにある可能性があります。

+0

からの私はちょうど同じことを確認していません。それはC + +のDLL内から呼び出されたときにうまく動作します。問題はC#から呼び出されたときです。 – zack

+0

おそらく、C#の型付きIntPtrがNullを送信しています –

関連する問題