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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 type IShaiTruc = interface(IUnknown) function SearchMachin(const ChaineID: WideString): ISearchResult; stdcall; 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 ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
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 ...)







Répondre avec citation


mais c'est ce que j'ai mis, de toute façon, c'est la seule chose que la TLB propose ... mais pourquoi ! j'ai le message d'erreur
, ou tout simplement, dans ce langage, c'est tellement plus implicite, qu'ils ne connaissent absolument pas les aspects sous-jacents de celui-ci, en tout cas, mon interlocuteur qui doit intégré mon objet, n'a pas fait preuve de grande connaissance, faut dire qu'au début, je lui dit que je lui proposais un DLL Win2 ou un ActiveX, il me répond qu'il préfère une DLL Win32, et il me sort qu'il ne peut pas l'inclure à son référentiel de classe, ben euh, logique ... j'ai du refaire par dessus la DLL une sur-couche COM, je me suis bien amusé pour la gestion mémoire des PChar, cela m'a fait de l'exercice
, ... et idem, il a fallu que je découvre le VBScript pour faire mes tests, un script qui mérite une certaine attention finalement ...)
Partager