Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

Property an DLL übergeben?


3 replies to this topic

Andy_43

Andy_43
  • Members
  • 2 posts

Posted 13 November 2003 - 10:04

Moin Moin,
ich möchte ein Property an eine Funktion in einer DLL übergeben, in der DLL kommt aber immer ein Leerstring an. Was mache ich falsch?

Meine CustomAction ist definiert als:

BOOL =[ARPHELPLINK]isTools::SetHostAddress(in STRING="3270", in STRING=[HOSTADR3270])

Meine Funktion in der DLL ist definiert als:

extern "C" BOOL WINAPI EXPORT SetHostAddress(LPCSTR szType, LPSTR szIP)

Hat jemand ne Idee?

Gruss, Andreas

Andy_43

Andy_43
  • Members
  • 2 posts

Posted 13 November 2003 - 15:18

das man nur das MsiHandle an die DLL übergeben darf und die Properties in der DLL mit MsiGetProperty ermitteln kann, habe ich zwischenzeitlich rausgefunden.
Leider funktioniert das ganze nicht bei deferred actions. Die diversen Artikel zu dem Thema habe ich gelesen, hat aber alles nicht weiter geholfen. Der anfänglich gute Eindruck von DevStudio 9 ist so ziemlich dahin. Es muss doch möglich sein,
eine Funktion in einer DLL nach dem kopieren der Dateien aufzurufen, um spezielle
Anpassungen in den installierten Dateien vorzunehmen.
mad.gif Andy

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 13 November 2003 - 17:45

Ja, aber da ist eben diese Beschränkung im Windows Installer Dienst mit Deferred Aktionen. Das einfachste wäre, die Aktion Immediate zu machen und nach InstallFinalize einzufügen.
Ansonsten war dein erster Ansatz gar nicht schlecht. Um eine DLL aufzurufen, die nicht dem MSI-Standard entspricht, bring InstallShield einen Wrapper mit, den du im ersten Anlauf konfiguriert hast.

Beutel

Beutel
  • Members
  • 1 posts

Posted 20 November 2003 - 11:42

Hallo,

die einzige offizielle Möglichkeit ist, unmittelbar vor der Custom Action ein Property zu definieren, welches den gleichen Namen hat wie deine Funktion.
Also, wenn deine Funktion 'Action' heisst, dann musst du ein Property mit den Namen 'Action' definieren, dem du die benötigten Werte übergibst. Du musst dir dann nur noch Gedanken machen, wie du bei mehreren Werten die verschiedenen Werte trennst und in der dll richtig zuordnest.
Die Werte bekommst du in der dll, wenn du den Wert des Property "CustomActionData" abfragst.

Klappte bei mir prima!

Maik Hoffer
cool.gif