Hi All
Has anyone tried calling an exported function from C DLL in a Perl Program.
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.
_________________________________________________________________
Spice up your IM conversations. New colourful, animated emoticons. Go
chatting! http://server1.msn.co.in/SP05/emoticons/
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>