Re: [perl-win32-gui-users] problem with Win32::GUI::AxWindow when building exe file with Activestate Perlapp

2004-03-03 Thread Aldo Calpini
On Tue, 2004-03-02 at 21:47, Laurent ROCHER wrote:
> For correct this problem, i need to enumerate all dll attached to
> current process and try to found renamed OLE.dll.

try this command: "set PERL_DL_DEBUG=1" and then launch your exe. this
should give you some hint about the dll that are being loaded. try
"perldoc DynaLoader" for more information on the subject.

> I found some source code for do this but it's not easy ;o) because don't
> exist a standard API for all Windows system.
> http://www.alexfedotov.com/articles/enumproc.asp
> 
> I try to add this in next release.

no please. Win32::GUI is not the place for this stuff. probably
Win32::Process is the correct place, if it's not implemented already.

cheers,
Aldo




Re: [perl-win32-gui-users] problem with Win32::GUI::AxWindow whenbuilding exe file with Activestate Perlapp

2004-03-03 Thread Laurent ROCHER
Hi,

I don't whant add new code or method to Win32::GUI but make change in my
Win32::GUI::AxWindow XS code.
You advice about Dynaloader it's very usefull.
I can found dll handler with it. It test it with PAR and it's work nice.

void
GetOLE (container)
   CContainer*  container
CODE:
{
#ifdef PERL_5005
  typedef SV* (*MYPROC)(CPERLarg_ HV *, IDispatch *, SV *);
#else
  typedef SV* (*MYPROC)(pTHX_ HV *, IDispatch *, SV *);
#endif

  HMODULE hmodule;
  MYPROC pCreatePerlObject;
  IDispatch * pDispatch;

  ST(0) = &PL_sv_undef;
  // Try to find OLE.dll
  hmodule = GetModuleHandle("OLE");
  if (hmodule == 0) {
// Try to find using Dynaloader
AV* av_modules = get_av("DynaLoader::dl_modules", FALSE);
AV* av_librefs = get_av("DynaLoader::dl_librefs", FALSE);
if (av_modules && av_librefs) {
  // Look at Win32::OLE package
  for (I32 i = 0; i < av_len(av_modules); i++) {
SV** sv = av_fetch(av_modules, i, 0);
if (sv && SvPOK (*sv) &&
strEQ(SvPV_nolen(*sv), "Win32::OLE")) {
  // Tahe
  sv = av_fetch(av_librefs, i, 0);
  hmodule = (HMODULE) (sv && SvIOK (*sv) ? SvIV(*sv) : 0);
  break;
}
  }
}
  }

  if (hmodule != 0) {
pCreatePerlObject = (MYPROC) GetProcAddress(hmodule,
"CreatePerlObject");
if (pCreatePerlObject != 0)  {
  HV *stash = gv_stashpv("Win32::OLE", TRUE);
  pDispatch = container->GetIDispatch();
  pDispatch->AddRef();
#ifdef PERL_5005
  ST(0) = (pCreatePerlObject)(PERL_OBJECT_THIS_ stash, pDispatch, NULL);
#else
  ST(0) = (pCreatePerlObject)(aTHX_ stash, pDispatch, NULL);
#endif
}
  }
}
My code is now :
void
GetOLE (container)
   CContainer*  container
CODE:
{
#ifdef PERL_5005
  typedef SV* (*MYPROC)(CPERLarg_ HV *, IDispatch *, SV *);
#else
  typedef SV* (*MYPROC)(pTHX_ HV *, IDispatch *, SV *);
#endif

  HMODULE hmodule;
  MYPROC pCreatePerlObject;
  IDispatch * pDispatch;

  ST(0) = &PL_sv_undef;
  // Try to find OLE.dll
  hmodule = GetModuleHandle("OLE");
  if (hmodule == 0) {
// Try to find using Dynaloader
AV* av_modules = get_av("DynaLoader::dl_modules", FALSE);
AV* av_librefs = get_av("DynaLoader::dl_librefs", FALSE);
if (av_modules && av_librefs) {
  // Look at Win32::OLE package
  for (I32 i = 0; i < av_len(av_modules); i++) {
SV** sv = av_fetch(av_modules, i, 0);
if (sv && SvPOK (*sv) &&
strEQ(SvPV_nolen(*sv), "Win32::OLE")) {
  // Tahe
  sv = av_fetch(av_librefs, i, 0);
  hmodule = (HMODULE) (sv && SvIOK (*sv) ? SvIV(*sv) : 0);
  break;
}
  }
}
  }

  if (hmodule != 0) {
pCreatePerlObject = (MYPROC) GetProcAddress(hmodule,
"CreatePerlObject");
if (pCreatePerlObject != 0)  {
  HV *stash = gv_stashpv("Win32::OLE", TRUE);
  pDispatch = container->GetIDispatch();
  pDispatch->AddRef();
#ifdef PERL_5005
  ST(0) = (pCreatePerlObject)(PERL_OBJECT_THIS_ stash, pDispatch, NULL);
#else
  ST(0) = (pCreatePerlObject)(aTHX_ stash, pDispatch, NULL);
#endif
}
  }
}

> > For correct this problem, i need to enumerate all dll attached to
> > current process and try to found renamed OLE.dll.
>
> try this command: "set PERL_DL_DEBUG=1" and then launch your exe. this
> should give you some hint about the dll that are being loaded. try
> "perldoc DynaLoader" for more information on the subject.
>
> > I found some source code for do this but it's not easy ;o) because don't
> > exist a standard API for all Windows system.
> > http://www.alexfedotov.com/articles/enumproc.asp
> >
> > I try to add this in next release.
>
> no please. Win32::GUI is not the place for this stuff. probably
> Win32::Process is the correct place, if it's not implemented already.
>
> cheers,
> Aldo
>




Re: [perl-win32-gui-users] problem with Win32::GUI::AxWindow whenbuilding exe file with Activestate Perlapp

2004-03-03 Thread Laurent ROCHER
Oups, sorry for duplicate code.

> Hi,
>
> I don't whant add new code or method to Win32::GUI but make change in
my
> Win32::GUI::AxWindow XS code.
> You advice about Dynaloader it's very usefull.
> I can found dll handler with it. It test it with PAR and it's work
nice.
>