----- Original Message ----- 
From: "Sankaran P V" <[EMAIL PROTECTED]>
To: <inline@perl.org>
Sent: Thursday, July 21, 2005 1:18 PM
Subject: How can I call MFC / SDK Functions from Perl


> Hello all,
> Does anybody knows how can I call MFC / SDK calls from Perl?
> I have installed Inline:C module. Is it sufficient? Or any other modules?

I have (in my F:/C folder), the following files:

--- start mfc.h ---
extern "C" __declspec(dllexport) int SomeFunction(int);
----------------------

--- start mfc.cpp ---
#include "mfc.h"

extern "C" __declspec(dllexport) int SomeFunction(int x)
{
     return x + 11;
}
--------------------------

I then run:

F:\C> cl /LD mfc.cpp

which gives me 'mfc.lib' and 'mfc.dll'.

I also have the following file (in F:\C):

--- start C_mfc.pl ----
use warnings;
use Inline C => Config =>
    LIBS => '-LF:/C -lmfc',
    INC => '-IF:/C',
    BUILD_NOISY => 1;

use Inline C => <<'EOC';

#include <mfc.h>

int wrap_SomeFunction(int a) {
    return SomeFunction(a);
}

EOC

$z = wrap_SomeFunction(1234567);
print $z, "\n";
-------------------------

When I run 'perl C_mfc.pl' I end up with the following errors:

F:/C\mfc.h(1) : error C2059: syntax error : 'string'
C_mfc_pl_5a3b.xs(9) : warning C4013: 'SomeFunction' undefined; assuming
extern returning int
NMAKE : fatal error U1077: 'cl' : return code '0x2'
Stop.

If I change (in C_mfc.pl) both occurrences of 'Inline C' to 'Inline CPP',
then the whole thing builds and runs fine, reporting that $z is 1234578, as
it ought.

Does that answer your question ?

I'm not sure that the dll I built is actually an "MFC" dll. If it's not, can
you provide source code to build a simple "MFC" dll, so that I/we can build
something with which I/we can experiment.

Cheers,
Rob

Reply via email to