AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

MathType einbinden

Ein Thema von mjenke · begonnen am 4. Jun 2007 · letzter Beitrag vom 13. Jun 2007
 
mjenke

Registriert seit: 28. Mär 2003
Ort: Bonn
131 Beiträge
 
#1

MathType einbinden

  Alt 4. Jun 2007, 13:45
Hallo, alle miteinander,


ich versuche seit einiger Zeit, die MathType-DLL und -WLL einzubinden, um programmautomatisch auf Formeln in Word-Dokumenten zuzugreifen, sie zu konvertieren etc. Und wie dem immer so ist: es klappt natürlich nicht...

Ich habe mir eine Klasse geschrieben, um gewisse Dinge zu erledigen. Wenn ich ein Objekt dieser Klasse erzeuge, erfolgt ein InitAPI von Mathtype, das auch fehlerfrei funktioniert:

Delphi-Quellcode:
type

  TMTInitAPI = function (
    options: SmallInt;
    timeout: SmallInt ): Integer; stdcall;

  TMTAPIVersion = function ( api: SmallInt ): LongInt; stdcall;

[...]

function TMathType.DLLVersionIsCorrect: Boolean;
var
  APIVersion: TMTAPIVersion;
begin
  Result := False;
  if self.MTInstalled then begin
    @APIVersion := GetProcAddress ( FHandleWLL, 'MTAPIVersion' );
    if @APIVersion <> nil then
      Result := APIVersion ( 5 ) >= 1280;
  end;
end;

constructor TMathType.Create ( UserHandle: THandle );
var
  InitAPI: TMTInitAPI;
begin

  FUserHandle := UserHandle;
  FHandleWLL := LoadLibrary ( 'C:\Programme\MathType\MathPage\MathPage.wll' );
  FHandleDLL := LoadLibrary ( 'C:\Programme\MathType\System\MT5.dll' );

  if FHandleWLL = 0 then SendMessage ( FUserHandle, MSG_MT_WLLNOTINSTALLED, 0, 0 );
  if FHandleDLL = 0 then SendMessage ( FUserHandle, MSG_MT_DLLNOTINSTALLED, 0, 0 );

  FMathTypeInstalled := ( ( FHandleWLL <> 0 ) and ( FHandleDLL <> 0 ) );

  if FMathTypeInstalled then begin

    if self.DLLVersionIsCorrect then begin

      @InitAPI := GetProcAddress ( FHandleWLL, 'MTInitAPI' );
      if @InitAPI <> nil then ShowMessage ( 'InitApi: ' + IntToStr ( InitAPI ( mtinitLAUNCH_NOW, -1 ) ) )
      else ShowMessage ( 'InitApi ist nil' );

    end
    else ShowMessage ( 'Noch API-Version' );

  end;

end;
Wenn ich später allerdings eine Funktion aus der DLL aufrufe (und mich - meines Erachtens - genau an die Dokumentation des MathType-SDK halte) bekomme ich als Ergebnis immer -9999 gemeldet. Und das ist laut MathType-Dokumentation IRGENDEIN Fehler.

Beispiel für einen solchen Aufruf in meiner Klasse (die Parameter sind fest verdrahtet, da es sich hier wirklich nur um Tests handelt):

Delphi-Quellcode:
type

  TMPProcessHTML = function (
    inPath: String;
    outPath: String ): LongInt; stdcall;

[...]

procedure TMathType.ProcessHTML;
var
  ProcHTML: TMPProcessHTML;
begin
  if FHandleWLL <> 0 then begin
    if self.DLLVersionIsCorrect then begin
      @ProcHTML := GetProcAddress ( FHandleWLL, 'MPProcessHTML' );
      if @ProcHTML <> nil then begin
        try
          ShowMessage ( IntToStr ( ProcHTML ( 'Testdokument.htm', 'Testdokument_mt.htm' ) ) );
        except
          ShowMessage ( 'Absturz' );
        end;
      end;
    end;
  end;
end;
Zu beachten ist, dass das Terminieren der API auch wieder fehlerfrei vonstatten geht. Aber die Zugriffe auf Konvertierungsmethoden schlagen fehl (-9999).

Kennt sich jemand mit dieser Problematik aus? Ist schonmal jemand auf ähnliches gestoßen und hat es vielleicht gelöst? Wäre super, wenn Ihr mir helfen könntet.


Matthias
Matthias Jenke
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz