2009-08-04 1 views
3

J'exporte une fonction de vC++ DLL pour écrire dans un fichier binaire. Dans le code C++ le fichier est ouvert à l'aideIncident de mode d'ouverture de fichier entre C# et C++

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

I un en utilisant le mode "a+b" pour ajouter le fichier plus tard et b est pour le mode binaire.

Maintenant j'importe cette fonction dans mon application C#. Lorsque je fais un appel à cette fonction à partir de C# avec les bons arguments, le fichier est écrit mais pas en mode ajout. Ce que je veux dire, c'est que la fonction ouvre le fichier mais ne semble pas s'ajouter à son contenu, à la place elle détruit son contenu et écrit tout ce que mes arguments C# sont.

La plate-forme est VS2005. Toute aide s'il vous plaît?

- Merci Viren

Importé des commentaires

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

Après est l'appel à la fonction:

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

Viren, s'il vous plaît trouver le bouton Modifier et ajouter/corriger votre question plutôt que de mettre beaucoup de code dans un commentaire. –

Répondre

2

comment votre fonction C# ressemble?

s'il vous plaît fixer le ENUM

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

[DllImport ("NameOfTheDLL.dll", CharSet = CharSet.Ansi)] public static extern int nom_fonction (IntPtr ptr, [MarshalAs (UnmanagedType.LPWStr)] chaîne FilePath); Voici l'appel de la fonction: IntPtr ptr = some_Init_function(); nom_fonction (handle, C: \\ FileName); – zack

+0

Le fichier n'est pas ouvert par l'application C#. Donc, je ne comprends pas le fichier FileMode.oPEN EST REQUIS. LE FICHIER EST OUVERT DANS LA DLL C++. Veuillez me guider si je me trompe. Je suis nouveau à la programmation .NET – zack

+0

A propos: StreamReader sr = new StreamReader (FilePath) est ce que j'utilise pour lire à partir du fichier binaire – zack

0

Est-ce que le travail de la fonction C++ comme prévu lorsqu'ils ne sont pas importés dans C#? Le problème peut être avec le code dans la DLL elle-même.

+0

Non, je viens de vérifier la même chose. Cela fonctionne très bien lorsqu'il est appelé depuis la DLL C++. Le problème est lorsqu'il est appelé à partir de C#. – zack

+0

peut-être le IntPtr typé sur C# envoie Null –