Utilisation d'un COM Delphi Win32 avec VB ou C# .NET
J'ai un problème, je l'ai déjà mentionné dans ce sujet dans le forum C# mais pas de réponse probante...
Donc, j'ai réalisé un objet COM pour un partenaire qui utilise le Framework .NET,
Il a pu recenser mon objet dans son namespace, il peut l'instancier et appeler une méthode sans problème ...
mais la plupart des méthodes prennent un paramètre, et l'une des plus simples échoue
Code:
1 2 3 4
| type
IShaiTruc = interface(IUnknown)
function SearchMachin(const ChaineID: WideString): ISearchResult; stdcall;
end; |
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| function TShaiTrucImpl.SearchMachin(const ChaineID: WideString): ISearchResult;
var
ObjRes: TSearchResultImpl;
S: string;
begin
ObjRes := TSearchResultImpl.Create();
S := ChaineID; // Boom ICI, la chaine ChaineID ne contient pas du tout ce qu'il faut, même pas le moindre "1" (Code 31 00)
ObjRes.FData := ShaiTruc_API_Header.SearchMachin(PAnsiChar(S)); // Ici, j'appelle la DLL Win32, si je ne met pas la conversion de ChaineID, ça continue son chemin ...
Result := ObjRes;
end; |
et bien, impossible de lire ChaineID, je n'ai pas de violation d'accès mais la mémoire ne contient pas du tout ce qu'il devrait ...
J'ai donc testé d'aller plus loin en ignorant le paramètre, et j'ai une violation d'accès sur l'affectation du Result, et oui IsBadWritePtr me dit que Result n'est pas inscriptible ... génant ...
Alors qui a déjà fait un COM Delphi Win32 pour un environnement .NET, et quelles sont les astuces côté Delphi ou côté VB\C# qui permettent que cela fonctionne ...
Pour le moment, je suis sur un autre projet, mais si je n'ai aucune solution lors de la reprise de l'objet COM, eh bien faudra faire à la place un WebService, ... et refaire encore, refaire ça me gave ... sachant qu'à la base, l'objet COM n'est qu'une encapsulation d'une DLL Win32 qui soit disant n'est pas intégrable en VB.NET (pourtant j'ai vu qu'il existait DllImport ... bon ...)