Thread Windows: Perl-Modul einer DLL mit XS (8 answers)
Opened by Gast at 2008-05-24 01:58

Gast Gast
 2008-05-24 01:58
#110205 #110205
Hallo Forum,
ich versuche gerade unter Windows eine C-Funktion die in einer DLL abgelegt ist mittels XS von Perl aus aufzurufen.
Als Compiler verwende ich den MinGW mit dmake.

Bei "dmake test" bekomme ich jedoch folgende Fehlermeldung:

Code: (dl )
1
2
3
4
5
#   Failed test 'use HalloDLLtest;'
# at t/HalloDLLtest.t line 9.
# Tried to use 'HalloDLLtest'.
t/HalloDLLtest....NOK 1/1# Error: Can't load 'D:\c\hallo_dll\perl_use_dll\HalloDLLtest\blib\arch/auto/HalloDLLtest/
HalloDLLtest.dll' for module HalloDLLtest: load_file:Die angegebene Prozedur wurde nicht gefunden at C:/Perl/lib/DynaLoader.pm line 229.


Mein Makefile.PL habe ich folgendermaßen ergänzt:

LIBS => ['-lHalloDLLtest.a'], # e.g., '-lm'
DEFINE => '-DBUILD_DLL', # e.g., '-DHAVE_SOMETHING'

Die HalloDLLtest.a habe ich mir beim gcc mit der Option "--out-implib,HalloDLLtest.a" erzeugen lassen.

Meine HalloDLLtest.h sieht so aus:

[cpp]
#ifdef BUILD_DLL
/* DLL export */
#define EXPORT __declspec(dllexport)
#else
/* EXE import */
#define EXPORT __declspec(dllimport)
#endif

EXPORT int add_dll(int a, int b);[/cpp]

Meine .xs so:
[cpp]
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"
#include "HalloDLLtest.h"
MODULE = HalloDLLtest PACKAGE = HalloDLLtest

int add_dll(a, b);
int a
int b
PROTOTYPE: $$
CODE:
RETVAL = add_dll(a, b);
OUTPUT:
RETVAL
[/cpp]

Eine dll wird bei dmake auch im entsprechenden Verzeichnis erzeugt.
Ich hoffe, dass ich mit meiner .a Datei bei LIBS richtig liege, so ganz verstanden wie das nachher eingebunden wird habe ich das auch noch nicht.

Hat jemand vielleicht einen Hinweis wo der Fehler liegen könnte?

Danke und Gruß
Thomas

View full thread Windows: Perl-Modul einer DLL mit XS