Probleme de passage de string entre DLL win32 et projetC#?
Bonjour a tous...
Voila j'ai une DLLwin32 qui me renvoie une string (écrite en pascal) et j'ai un programme c# (je suis sous delphi2006) qui doit me récupérer cette string comme montré ci-dessous;
la DLL:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
uses
SysUtils,
Classes,
ShareMem;
{$R *.res}
function Phrase(): string;stdcall;
begin
Phrase := 'la phrase a envoyer';
end;
exports Phrase; |
le source C#:
Code:
1 2 3 4 5 6
|
//import de la fonction de DLL
[DllImport("c:\\envoieString.dll")]
private static extern string Phrase();
string maPhrase = Phrase(); //récupèration de ma phrase |
Mais le probleme est que quand j'exécute le source C# j'ai une erreur d'exécution à la ligne "string maPhrase = Phrase(); "...j'ai l'erreur suivante:
Code:
1 2
|
La référence d'objet n'est pas définie à une instance d'un objet |
J'ai ce problème que pour le type string et je ne comprend pas...
Quelqu'un peut il m'expliquer ce qui se passe et m'expliquer ce que je dois faire?
Merci d'avance pour l'aide ;)
Un exemple qui marche de C à C#
J'ai eu le même problème que toi mais en partant de dlls en C (sous labwindows CVI) et projet C# (VS 2003).
Voici mon code, ça peut t'aider:
Fonction en C dans le fichier .h
Code:
1 2
|
char *__stdcall _ReturnErrorString (int error); |
Appel de la fonction en C#
Code:
1 2 3
|
[DllImport("dll_name.dll",EntryPoint="_ReturnErrorString",ExactSpelling=false,CallingConvention=CallingConvention.StdCall)]
public static unsafe extern string ReturnErrorString (int error); |
et utilisation de la fonction en C#
Code:
1 2 3 4 5 6 7 8 9
|
public unsafe void LowLevelCall(int error,string failed_message)
{
string msg2 = DLL._ReturnErrorString(error);
string msg = String.Format("{0} - Error [{1}]: {2}",failed_message,error,msg2);
//Write in log message
this.LogText = msg;
throw new Exception(msg);
} |
Je te précise que je suis débutante en programmation en C#... mais j'espère que ça pourra t'aider...
problème de passage de string
Ta fonction pascal devrait retourner un pchar c'est le type de chaine que traite C# ou Windows c'est la déclaration type du C