Fonctionne très bien si je ne renvoie rien, ou si je renvoie un entier. Mais si j'essaie de retourner un PChar, à savoir ..Application Web ASP.NET appelant DLL Delphi sur le serveur Web IIS, se verrouille lors du renvoi de la chaîne PChar
result := PChar('') or result:= PChar('Hello')
L'application Web gèle et je regarde sa mémoire compte obtenir progressivement plus en plus haut dans le gestionnaire de tâches. La chose étrange est que la DLL fonctionne bien sur le serveur de débogage VStudio, ou via une application C#. La seule chose que je peux penser à cela ferait une différence est que le serveur IIS fonctionne en 64 bits Windows.
Cela ne semble pas être un problème de compatibilité, car je peux écrire avec succès dans des fichiers texte et faire d'autres choses à partir de la DLL ... Je ne peux pas retourner une chaîne PChar. Essayé en utilisant PWideChar, essayé de retourner «quelque chose \ 0», essayé tout ce que je pouvais penser. Pas de chance malheureusement.
[DllImport("TheLib.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
private static extern string SomeFunction();
string result = SomeFunction();
delphi:
library TheLib;
function SomeFunction() : PChar export; stdcall;
begin
return PChar('');
end;
exports
SomeFunction
Je dois attendre jusqu'à lundi pour essayer votre solution sur IIS au travail, mais le raisonnement derrière cela me semble solide. Une chose cependant .. J'ai testé le code à la maison, et je ne peux pas obtenir la valeur de retour au travail, il donne juste une exception 'Tentative de lire ou d'écrire de la mémoire protégée.'. Je suis cependant capable de réaliser ce que je veux faire en utilisant une variable 'out' et en passant le résultat de cette façon. Savez-vous pourquoi je serais incapable de revenir? Je rassemble le résultat comme dans votre code. Est-ce parce que c'est Delphi 2007? Je vais bien utiliser le truc 'out', mais j'aimerais savoir pourquoi c'est nécessaire. – NoPyGod
Je vois Alex a le même problème ici - http://stackoverflow.com/questions/8533505/accessing-delphi-dll-throwing-ocasional-exception – NoPyGod
Voici ma source http://pastebin.com/NfWLdF6V – NoPyGod