Ich bin eine COM-API wickeln Letztendlich versuche ich, mehr Code in Generics zu drücken und das Vererbungsmuster in der API hilft nicht.Aufrufen einer COM-Methode mithilfe von InvokeMember
Ich habe eine generische IBase, Es gibt ~ 80 Klassen, die Ergebnissätze darstellen. Sie sind sehr ähnlich, aber sie alle erben oder implementieren eher die sehr einfache IBase.
Ich habe versucht, Extension-Methoden und ich glaube nicht, dass der Weg zu gehen ist, weil die com ist spät gebunden und mit Reflection.PropertyInfo schien eine Sackgasse zu sein.
Im generischen haben wir die Untertypen, also denke ich, dass ich InvokeMember verwenden kann, um die Methoden/Eigenschaften aufzurufen, die ich brauche.
Meine Herausforderung ist, dass ich das ProgId nicht finden kann. Ich habe die Registrierung durchsucht, ich habe viele Vermutungen gemacht. "Excel.Application" funktioniert, also ist der grundlegende Ansatz solide.
Die COM dll in Frage ist die Intuit Quickbooks API. Ich habe versucht, viele Variationen von
„QBFC13Lib.ICustomerRetList“
Bin ich auf dem richtigen Weg? Wenn ja, wo finde ich das ProgId? Soll ich eine andere Wende versuchen?
von OleView, sehe ich diese für ICustomerRetList
[
odl,
uuid(DF331154-953C-4813-BAEC-F65DDBBFEB5B),
helpstring("ICustomerTypeRetList Interface"),
dual,
oleautomation
]
interface ICustomerTypeRetList : IQBBase {
[id(0x00000004), helpstring("method GetAt")]
HRESULT GetAt(
long index,
[out, retval] ICustomerTypeRet** retVal);
[id(0x00000005), propget, helpstring("property Count")]
HRESULT Count([out, retval] long* pVal);
[id(0x00000006), helpstring("method Append")]
HRESULT Append([out, retval] ICustomerTypeRet** retVal);
};
einige relevante Linien von der typelib
gibt es 36-Schnittstelle Erklärungen. Ich denke, wir festgestellt haben, wir nicht nach diesen sind ... wir die Dinge wollen, dass diese
interface ICustomerMsgRetList;
interface ICustomerMod;
dort implementieren sind viele Linien, die Typen wie die Zeile unter verweisen. Dies sind einfach Objekte, die den Kunden als Eigenschaft haben (Bestellung zum Beispiel). Diese werden alle in Interface-Deklarationen gefunden. Es ist schon eine Weile her, seit ich C++ gemacht habe. Ist IQBBase ein Zeiger auf einen Zeiger? Nachdenklich denken, brauchen Sie keine Antwort.
HRESULT CustomerRef([out, retval] IQBBaseRef** pVal);
Also ja, kann es zu einer Fabrik sein dort irgendwo. Ich glaube, dass diese Objekte (ICustomerRetList-Implementierer) instanziierbar sind, sie sind eindeutig instanziiert. Aber die Typelib gibt ihre Geheimnisse nicht auf. Zurück zur ursprünglichen Frage, ich glaube nicht, dass es eine Antwort gibt, wenn ich nicht das ProgId bekommen kann. Die ProgIDs können absichtlich verschleiert werden. Weiß nicht. Ich weiß, ich denke an sie und war nicht erfolgreich. Das Intuit Support Forum ist nach meinem besten Wissen nicht mehr aktiv.
erhalten https://github.com/pkpjpmZombie –
danke, können Sie die Frage – greg