Hi

Is there a way to call exported methods from a DLL without using win32::API.

Has anyone tried calling an exported function from C DLL in a Perl Program using XS.

I have a C DLL's source file and its header file
and using h2xs

D:\DLLProjects\simpledll3>h2xs -n ext2 simpledll3.h
Writing ext2/ext2.pm
Writing ext2/ext2.xs
Writing ext2/Makefile.PL
Writing ext2/README
Writing ext2/test.pl
Writing ext2/Changes
Writing ext2/MANIFEST

D:\DLLProjects\simpledll3>cd ext2

D:\DLLProjects\simpledll3\ext2>perl makefile.pl
Checking if your kit is complete...
Looks good
Writing Makefile for ext2

D:\DLLProjects\simpledll3\ext2>nmake

Microsoft (R) Program Maintenance Utility   Version 1.50
Copyright (c) Microsoft Corp 1988-94. All rights reserved.

C:\Perl\bin\perl.exe -Ic:\Perl\lib -Ic:\Perl\lib C:\Perl\lib\ExtUtils/xs ubpp -typemap C:\Perl\lib\ExtUtils\typemap ext2.xs > ext2.xsc && C:\Perl\bin\pe
rl.exe -Ic:\Perl\lib -Ic:\Perl\lib -MExtUtils::Command -e mv ext2.xsc ext2.c
cl -c -nologo -O1 -MD -Zi -DNDEBUG -DWIN32 -D_CONSOLE -DNO_STRICT -DHAV E_DES_FCRYPT -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DPERL_MSVCRT_READFIX - O1 -MD -Zi -DNDEBUG -DVERSION=\"0.01\" -DXS_VERSION=\"0.01\" -IC:\Perl\lib\
CORE  ext2.c
ext2.c
cl -c -nologo -O1 -MD -Zi -DNDEBUG -DWIN32 -D_CONSOLE -DNO_STRICT -DHAV E_DES_FCRYPT -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DPERL_MSVCRT_READFIX - O1 -MD -Zi -DNDEBUG -DVERSION=\"0.01\" -DXS_VERSION=\"0.01\" -IC:\Perl\lib\
CORE  simpledll3.cpp
simpledll3.cpp
"Running Mkbootstrap for ext2 ()"
C:\Perl\bin\perl.exe -Ic:\Perl\lib -Ic:\Perl\lib -MExtUtils::Command -e
chmod 644 ext2.bs
link -out:blib\arch\auto\ext2\ext2.dll -dll -nologo -nodefaultlib -debug -opt:ref,icf -libpath:"c:\Perl\lib\CORE" -machine:x86 ext2.obj simpledll3.obj C:\Perl\lib\CORE\perl56.lib "C:\Program Files\Microsoft Visual Studio\VC98\Li b\oldnames.lib" "C:\Program Files\Microsoft Visual Studio\VC98\Lib\kernel32.lib" "C:\Program Files\Microsoft Visual Studio\VC98\Lib\user32.lib" "C:\Program File s\Microsoft Visual Studio\VC98\Lib\gdi32.lib" "C:\Program Files\Microsoft Visual Studio\VC98\Lib\winspool.lib" "C:\Program Files\Microsoft Visual Studio\VC98\L ib\comdlg32.lib" "C:\Program Files\Microsoft Visual Studio\VC98\Lib\advapi32.lib " "C:\Program Files\Microsoft Visual Studio\VC98\Lib\shell32.lib" "C:\Program Fi les\Microsoft Visual Studio\VC98\Lib\ole32.lib" "C:\Program Files\Microsoft Visu al Studio\VC98\Lib\oleaut32.lib" "C:\Program Files\Microsoft Visual Studio\VC98\ Lib\netapi32.lib" "C:\Program Files\Microsoft Visual Studio\VC98\Lib\uuid.lib" " C:\Program Files\Microsoft Visual Studio\VC98\Lib\wsock32.lib" "C:\Program Files \Microsoft Visual Studio\VC98\Lib\mpr.lib" "C:\Program Files\Microsoft Visual St udio\VC98\Lib\winmm.lib" "C:\Program Files\Microsoft Visual Studio\VC98\Lib\ver sion.lib" "C:\Program Files\Microsoft Visual Studio\VC98\Lib\odbc32.lib" "C:\Pro gram Files\Microsoft Visual Studio\VC98\Lib\odbccp32.lib" "C:\Program Files\Micr
osoft Visual Studio\VC98\Lib\msvcrt.lib" -def:ext2.def
Creating library blib\arch\auto\ext2\ext2.lib and object blib\arch\auto\ext2\
ext2.exp
ext2.obj : error LNK2001: unresolved external symbol _num
blib\arch\auto\ext2\ext2.dll : fatal error LNK1120: 1 unresolved externals
NMAKE : fatal error U1077: 'C:\WINNT\system32\cmd.exe' : return code '0x460'
Stop.


where num is the exported method which I have written in teh file SimpleDLL3.cpp

int _stdcall num(int x) {

return x+1;

}

I have written the XSUB in ext2.xs file as shown below:
int
num(x)
int x

Why does it give an error for _num or for that matter any exported function name.

Any help would be greatly appreciated.

Thanks,
Sam.

_________________________________________________________________
A Camera Sells every 2 Minutes on eBay.Get Your's at a Great Price Now! http://adfarm.mediaplex.com/ad/ck/4686-26272-10936-699?ck=Cameras


--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to