I could call C code complied in Vc++ and access the funtion in perl using Win32::API
(__stdcall convention used for compilation).
Now, I am applying the same approach to access the C++ DLL's class function.
use strict;
use win32;
use Win32::API;
use Win32::API::Callback;
use Win32::API::Test;
use Win32::API::Struct;
my $Testdll = Win32::API->new('Testdll','BOOL OpenConnection(N N N)','N')or die "Can't load function";
my $result = $Testdll->Call("https://google.com","username","password");
print "$result\n";
The above function "OpenConnection" is declared in a class
.
when i run the above perl script in strawberry perl error msg pops up shown below
Win32::API::parse_prototype: WARNING unknown parameter type '' at D:/strawberry/
perl/site/lib/Win32/API.pm line 287.
Win32::API::parse_prototype: WARNING unknown parameter type '' at D:/strawberry/
perl/site/lib/Win32/API.pm line 287.
Win32::API::parse_prototype: WARNING unknown parameter type '' at D:/strawberry/
perl/site/lib/Win32/API.pm line 287.
Can't load function at Test_1.pl line 10.
Is there any other way i can call the Dll's?
Shouls i write a wrapper function in perl.If so, how do i write?
.
Please help
Below i have written a C++ code for testing
Test.cpp
#include "Test.h"
#include <stdio.h>
class __declspec(dllexport) CDllTest
{
public:
CDllTest(){}
~CDllTest(){}
public:
void _stdcall SayHello();
};
void __stdcall CDllTest::SayHello()
{
printf("Hello C++");
}
Test.h
void _stdcall SayHello();
Perl File Test.pl
#!/usr/bin/perl -slw
use strict;
use warnings;
#use Win32::API;
#use Win32::API::Callback;
#use Win32::API::Test;
use Win32::API::Prototype;
my $fun = Win32::API->new('D:\Documents and Settings\M1009280\My Documents\Visual Studio 2005\Projects\Test\Test\Test.dll','CDllTest::SayHello()') or die $^E;
print "$fun\n";
my $Result = $fun->Call();
print "$Result\n";
when i execute the Test.pl (using Strawberry perl env)i get below error:
D:\strawberry\perl\bin>perl Test.pl
Win32::API::parse_prototype: bad prototype 'CDllTest::SayHello()' at D:/strawber
ry/perl/site/lib/Win32/API.pm line 317.
Died at Test.pl line 12.
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.