Einzelnen Beitrag anzeigen

Raketenschnitzel

Registriert seit: 22. Jan 2015
4 Beiträge
 
#1

EOleException 'Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt'

  Alt 28. Mai 2015, 15:04
Hallo DelphiCoder,

ich hab ne DLL von einem Unternehmen, die leider dem Datenschutz unterliegt. Daher kann ich sie leider nicht posten.
Das Ding enthält ein COM Server und ich möchte Funktionen aufrufen.

Mein Problem:
Ich krieg ne Exception und hab nicht die geringste Ahnung, woran es liegt.
Wie debugge ich so ein Projekt? Hab die Quelldateien für die DLL des Unternehmens natürlich nicht da.
Die Exception ist auch merkwürdig, da der Pointer für MyExcelAddin ja existiert.
Hat jemand Ideen was ich machen kann, um weiterzukommen?

Mein Vorgehen:
1) Delphi > Komponenten > Komponente importieren (um mir ne Unit mit den entsprechenden Interfaces zu holen)
2) Objekt bauen und Pointer speichern (funktioniert)
3) Aufruf einiger einfacher Funktionen ohne Parameter mit Rückgabewerten String und PSafeArray (funktioniert)
4) Aufruf einer komplexeren Funktion mit Parametern
=> EOleException 'Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt'

Delphi-Quellcode:
MyExcelAddin := CoExcelAddin.Create; //s. Punkt 2
Memo1.Lines.Add(MyExcelAddin.GetVersionInfo); //s. Punkt 3
Fluidpointer := MyExcelAddin.GetAllFluids; //s. Punkt 3
if assigned(MyExcelAddin) then begin
    //hier kommt die Exception
    CalculationResult := MyExcelAddin.CalculateBPHE(Name, InData, FluidData, FluidData, 7, False); //s. Exception
end;
Hier noch die InterfaceDefinition, die ich für MyExcelAddin nutze und mittels Komponente importieren (s. Punkt 1) erstellt habe:
Delphi-Quellcode:
ISSPG7ExcelAddin = interface(IDispatch)
    ['{3904440C-92A7-49C8-B983-CD9F11764CDE}']
    function GetAllFluids: PSafeArray; safecall;
    function GetAllBPHE: PSafeArray; safecall;
    function GetAllModelsWithRestrictionSummary: PSafeArray; safecall;
    function CalculateBPHE(const CalculationName: WideString; const strIndata: WideString;
                           const strFluidSide1: WideString; const strFluidside2: WideString;
                           MaxNoResults: Integer; bLocalizationSettings: WordBool): PSafeArray; safecall;
    function CalculateApplication(const CalculationName: WideString;
                                  const strRadiatordata: WideString;
                                  const strTwoStagedata: WideString;
                                  const strFluidSide1: WideString; const strFluidside2: WideString;
                                  const strFluidSide3: WideString; MaxNoResults: Integer;
                                  AutoPerformance: WordBool; bLocalizationSettings: WordBool): PSafeArray; safecall;
    function GetVersionInfo: WideString; safecall;
  end;

Geändert von Raketenschnitzel (28. Mai 2015 um 15:23 Uhr)
  Mit Zitat antworten Zitat