Domanda

C'è un modo utilizzando py2exe o qualche altro metodo per generare file dll invece di file exe?

Vorrei creare fondamentalmente un normale dll Win32 con le funzioni normali, ma queste funzioni sarebbe codificato in pitone invece di c ++.

È stato utile?

Soluzione

Penso che si potrebbe risolvere questo facendo qualche incisione:

  • Date un'occhiata al modulo zipextimporter in py2exe. Aiuta con l'importazione di PYD-file da una zip.
  • Utilizzando questo, si potrebbe essere in grado di caricare file di output del py2exe nella propria app / dll utilizzando prime python-api. (Usa boost :: python se potete e volete)
  • E, dal momento che outputfile di py2exe è un lampo, si potrebbe collegare alla fine della DLL, rendendo il tutto ancora più integrato. (Vecchio trucco che funziona con il vaso-files troppo.)

Non è provato, ma penso che la teoria è il suono.

In sostanza, si reimplementare eseguibile uscita di py2exe main () nella DLL.

Altri suggerimenti

Dubito che py2exe fa questo, come è architectured intorno fornendo un exe bootstrapping che rotola fuori l'interprete Python e lo esegue.

Ma perché non solo incorporare Python in codice C, e compilare il codice in una DLL?

Non sono a conoscenza di py2exe essere in grado di farlo, come credo che in realtà non fa simboli oggetto out del codice Python, ma solo incorpora il byte-codice compilato in un eseguibile con il runtime di Python).

Creazione di una libreria nativa può richiedere un po 'più di lavoro (per definire il / C ++ interfaccia C a cose) con l'API di Python-C. Può essere un po 'più semplice utilizzando Elmer per questo.

Ai posteri, sono stato in grado di utilizzare Elmer per generare con successo una DLL utilizzabile recente. Il loro sito ha un esempio di costruzione di un wrapper DLL che carica il codice python . E 'piuttosto fresco perché è possibile modificare il codice python al volo per cambiare il comportamento DLL per il debug.

Purtroppo, per me, volevo una DLL portatile che avrebbe funzionato senza installare python. Quella parte non ha abbastanza non ha funzionato out of the box. Invece di ripetere tutti i passaggi, ecco un link per la risposta con i passaggi che ho preso: https://stackoverflow.com/a/ 24811840/3841168 . Ho dovuto distribuire python27.dll, elmer.dll e un paio di .pyd di insieme con la mia .dll; un runtime .NET appropriato è stato anche necessario in quanto il python27.dll non è legata di solito statico. Ci può essere qualche modo per aggirare tra cui una barca di dll di, ma non mi dispiace la distribuzione più DLL, quindi non ho scavare troppo.

Sembra che è possibile generare una DLL COM da py2exe:

http://www.py2exe.org/index.cgi/Py2exeAndCtypesComDllServer

  23     my_com_server_target = Target(
  24     description = "my com server",
  25     # use module name for ctypes.com dll server
  26     modules = ["dir.my_com_server"],
  27     # the following line embeds the typelib within the dll
  28     other_resources = [("TYPELIB", 1, open(r"dir\my_com_server.tlb", "rb").read())],
  29     # we only want the inproc (dll) server
  30     create_exe = False
  31     )
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top