2009-03-24 9 views
0

j'ai une dll Delphi 7 qui exporte la fonction suivante:dll C# PInvoke Delphi qui retourne une chaîne échoue dans IIS ne

function StringTest(var StringOut : pchar) : boolean; stdcall; 

begin 
    GetMem(StringOut, 100); 
    StrPCopy(StringOut, 'Test output string.'); 
    result := true; 
end; 

Cette fonction est importée en C# comme suit:

[DllImport(@"C:\\Test\\DelphiTest.dll")] 
public static extern bool StringTest(out string stringOut); 

Lorsque j'appelle l'importation à partir d'une application WPF, cela fonctionne très bien et je vois ma chaîne de test retournée dans le paramètre out. Quand je tente la même chose à partir d'un site hébergé à Cassini, ça marche bien aussi. Toutefois, lorsque j'exécute cette méthode à partir d'un site hébergé dans IIS7, il échoue. Si je commente les lignes GetMem et StrPCopy, la fonction renvoie "true" dans IIS. Comment puis-je récupérer des données chaîne en C# à partir de Delphi dans un site hébergé dans IIS?

+1

Vous devriez vraiment être plus précis sur la nature de l'erreur. Dire simplement "ça échoue" ne dit rien à personne. –

Répondre

4

Ce n'est pas ainsi que les fonctions dll 'normales' retournent des chaînes. Il n'est pas clair dans votre code qui devrait libérer la chaîne. Peut-être que c'est la raison .Net ne l'aime pas toujours. L'appelant doit allouer assez de mémoire pour mettre la chaîne de résultat.

function StringTest(const StringOut : pchar; MaxLen: Integer) : Boolean; stdcall; 
begin 
    StrPLCopy(StringOut, 'Test output string.', MaxLen); 
    result := true; 
end; 

[DllImport(@"C:\\Test\\DelphiTest.dll", CharSet = CharSet.Ansi)] 
public static extern bool StringTest(ref string stringOut, int maxLen); 
Questions connexes