Announcement

Collapse
No announcement yet.

Prozedurnamen in DLL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Prozedurnamen in DLL

    Guten Tag mitnand,

    wie schaffe ich es, dass die Prozedur in meiner DLL nach außen hin den gleichen Namen bekommt wie in der DLL. Ich habe eine Delphi-Programm um eine Funktion erweitert, die ich in C++ verfasst habe. Die C++ Prozedure sieht so aus:
    void _export Kundenstamm()
    Und über den DLLRunner, der die DLL's ausführen kann, muss ich folgenden Namen eingeben:
    @Kundenstamm$qv. Ich hab's schon mit _pascal und _stdcall usw. versucht. Wie schaffe ich es, dass ich die Prozedur Kundenstamm auch mit Kundenstamm starten kann?

  • #2
    Und über den DLLRunner ... was ist das?
    Christian

    Comment


    • #3
      Der DLLRunner ist ein von mir entwickeltes Programm zu ausführen der in der DLL gespeicherten Prozeduren. Man gibt ihm als ersten Parameter die DLL-Datei und als zweiten die Prozedur oder Funktion an, die er ausführen soll. Ich konnte ihn am Anfang für meine DLL's gar nicht benutzen, da der Compiler die Prozeduren in der DLL umbenennt. Ich habe dann mit Depends, einem Microsoft Programm zum Ansehen des Inhaltes von DLL's, die Namen der Prozeduren herausgefunden.
      Ich muss, um die DLL zu debuggen, doch eine Hostanwendung angeben, diese stellt mein DLLRunner dar, der aber genau wie jedes andere Programm den externen Namen der Prozedur aus der DLL braucht. Und ich möchte, dass der externe Name gleich dem internen ist

      Comment


      • #4
        Hast du eine *.LIB Datei für die DLL erstellt? Diese wird in das Programm, welches die DLL nutzen will eingebunden. Normalerweise gehört auch eine *.h Datei dazu, in der die Funktionen und Klassen beschrieben sind.

        Dazu sind die Programme impdef und implib da.

        Wenn du natürlich nur mal in der DLL geschaut hast, wie.z.b.

        <pre>LIBRARY CHFILE.DLL

        EXPORTS
        @GFile@$bctr$qpculul @1 ; GFile::GFile(char*,unsigned long,unsigned long)
        @GFile@$bctr$qv @2 ; GFile::GFile()
        @GFile@$bdtr$qv @3 ; GFile::~GFile()
        @GFile@Close$qv @4 ; GFile::Close()
        @GFile@Fehler$qv @5 ; GFile::Fehler()
        @GFile@GetHandle$qv @6 ; GFile::GetHandle()
        @GFile@GetName$qv @7 ; GFile::GetName()
        @GFile@GetSeekPos$qv @8 ; GFile::GetSeekPos()
        @GFile@GetSize$qv @9 ; GFile::GetSize()
        @GFile@Open$q17System@AnsiStringulul @10 ; GFile::Open(System::AnsiString,long,unsigned long)
        @GFile@Open$qpculul @11 ; GFile::Open(char*,unsigned long,unsigned long)
        @GFile@OpenDatei$qpculul @12 ; GFile::OpenDatei(char*,unsigned long,unsigned long)
        @GFile@OpenReadExist$q17System@AnsiString @13 ; GFile::OpenReadExist(System::AnsiString)
        @GFile@OpenReadExist$qpc @14 ; GFile::OpenReadExist(char*)
        @GFile@OpenWriteNew$q17System@AnsiString @15 ; GFile::OpenWriteNew(System::AnsiString)
        @GFile@OpenWriteNew$qpc @16 ; GFile::OpenWriteNew(char*)
        @GFile@Read$qpvi @17 ; GFile::Read(void*,int)
        @GFile@ReadDelimiter$qr17System@AnsiString @18 ; GFile::ReadDelimiter(System::AnsiString&)
        @GFile@ReadLine$qr17System@AnsiString @19 ; GFile::ReadLine(System::AnsiString&)
        @GFile@Seek$qlul @20 ; GFile::Seek(long,unsigned long)
        @GFile@SeekProt$qlul @21 ; GFile::SeekProt(long,unsigned long)
        @GFile@SetDelimiter$qpc @22 ; GFile::SetDelimiter(char*)
        @GFile@SetEOF$qv @23 ; GFile::SetEOF()
        @GFile@SetReadRange$ql @24 ; GFile::SetReadRange(long)
        @GFile@Write$qpxvi @25 ; GFile::Write(const void*,int)
        @GFile@WriteDelimiter$q17System@AnsiString @26 ; GFile::WriteDelimiter(System::AnsiString)
        @GFile@WriteDelimiter$qpxvi @27 ; GFile::WriteDelimiter(const void*,int)
        @GFile@WriteLine$q17System@AnsiString @28 ; GFile::WriteLine(System::AnsiString)
        @GFile@WriteLine$qpxvi @29 ; GFile::WriteLine(const void*,int)
        @circle$qpviii @30 ; circle(void*,int,int,int)
        @line$qpviiii @31 ; line(void*,int,int,int,int)
        @round$qdi @32 ; round(double,int)
        _GetGFileVersion @33
        ___CPPdebugHook @34
        </pre>

        und keinen richtige Einbindung erfolgt, wirst du wohl keinen andere Wahl haben.

        Wenn ich dich richtig verstanden habe, läuft das Programm in Delphi??

        Normalerweise schreibt man eine eigene kleine Hostanwendung um die DLL zu testen und bindet dort alle Dateien auch ei
        Christian

        Comment

        Working...
        X