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.

In reply to How do I call C++ Dll's class Function in perl using Win32::API by anupama

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • 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:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.