C++ mangles (modifies) names for export so that if the DLL contains two (or more) classes that both have a foo() method, they will not clash.
Run the command: dumpbin /exports your.dll to see what the exported entrypoints look like. These are the function/prototype names you would need to supply to Win32::API.
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
| [reply] [d/l] [select] |
Also, Win32::API doesn't expose c++ constructor new
| [reply] |
Test.dll dump looks like this
Microsoft (R) COFF/PE Dumper Version 8.00.50727.42
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file Test.dll
File Type: DLL
Section contains the following exports for Test.dll
00000000 characteristics
49B9DFE4 time date stamp Fri Mar 13 09:54:04 2009
0.00 version
1 ordinal base
4 number of functions
4 number of names
ordinal hint RVA name
1 0 00001000 ??0CDllTest@@QAE@XZ
2 1 00001010 ??1CDllTest@@QAE@XZ
3 2 00001020 ??4CDllTest@@QAEAAV0@ABV0@@Z
4 3 00001030 SayHello
Summary
3000 .data
2000 .rdata
1000 .reloc
1000 .rsrc
9000 .text
Is this the problem from Perl side
| [reply] |
Is this the problem from Perl side
Yes. In order to call the functions in your DLL, you need to supply Win32::API with the name of the function to call--but it has to be the name as exported, not the internal C++ method name.
Because a single class can have multiple methods with the same name but different nos and/or types of parameters, the names have to be "mangled" for export. Encoded within those mangled names is the number and types of the parameters the functions (methods) expect.
See Name mangling for more info. It doesn't mean that calling C++ methods is impossible with Win32::API--just makes it sufficiently hard that no one will bother unless they absolutely have no choice. Eg. They have a C++ DLL that they must use, but no source.
You'd be better of investigating Inline::CPP.
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
| [reply] |