in reply to Re: How do I call C++ Dll's class Function in perl using Win32::API
in thread How do I call C++ Dll's class Function in perl using Win32::API

shouldn't matter with a case-insensitive file system.

  • Comment on Re^2: How do I call C++ Dll's class Function in perl using Win32::API

Replies are listed 'Best First'.
Re^3: How do I call C++ Dll's class Function in perl using Win32::API
by Anonymous Monk on Mar 12, 2009 at 10:56 UTC
    It does matter.
    D:\>perl -MWin32=NULL -e " warn NULL() 0 at -e line 1. D:\>perl -Mwin32=NULL -e " warn NULL() Undefined subroutine &main::NULL called at -e line 1.
      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','void SayHello()') or die $^E;
      print "$fun\n";
      my $Result = $fun->Call();
      print "$Result\n";


      when the above perl script is exectued with the correct o/p
      D:\strawberry\perl\bin>perl Test.pl
      Win32::API::parse_prototype: WARNING unknown output parameter type 'void' at D:/ strawberry/perl/site/lib/Win32/API.pm line 312.
      Hello C++
      Hai

      but need to forcebly exit to get the cmd prompt "perl.exe encountered a problem and needs to be close"
      how do i get rid of this problem
      Is the problem from perl script or C++ code?

        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.