Hi,
I'm having awful trouble trying to build a simple dll that Win32::API can 
access. I have version 0.53 of Win32::API, and perl-5.10.0 (built from 
source using the same (commercial version of) Visual Studio 7.0 compiler 
that I'm using to build the dll.

Here's one of the things that I've tried:

--- integer.h --
int my_int(int);

----------------

--- integer.c --
#include "integer.h"

int my_int(int x) {
    return x / 7;
}

----------------

Build the dll (with __stdcall calling convention):

----------------
C:\_32\c>cl /Gz /LD integer.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.00.9466 for 80x86
Copyright (C) Microsoft Corporation 1984-2001. All rights reserved.

integer.c
Microsoft (R) Incremental Linker Version 7.00.9466
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:integer.dll
/dll
/implib:integer.lib
integer.obj

C:\_32\c>
----------------

Write a script to access the dll's my_int function:

-- integer.pl --
use Win32::API;
use warnings;

$function = Win32::API->new('integer', 'my_int', 'N', 'N');
if(!$function) {print $^E, "\n"}
$ret = $function->Call(123);
print $ret, "\n";

----------------

Run integer.pl:

----------------
C:\_32\c>perl integer.pl
The specified procedure could not be found
Can't call method "Call" on an undefined value at integer.pl line 6.

C:\_32\c>
----------------

What am I missing ?

Does integer.dll need to export the my_int function ?
It doesn't export any symbols at all, so I've also tried building with 
__declspec(dllexport). The dll then exports '_my_int' (which has a leading 
underscore) and the output of running integer.pl remains unchanged.

Cheers,
Rob 

_______________________________________________
Perl-Win32-Users mailing list
Perl-Win32-Users@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to