Ok so you're wanting to load in some win32 dll's into a win64 process.
There used to be a way to interact/interoperate win16 to win32 via
"thunking" api's.  the thunking api's no longer seem to be valid from
win32 to win64.  There are some discussions about using out-of-process
COM to communicate between win32 to win64.
The only thing I have seen that may be related is loading a win32 dll
directly from win64 may only be allowed in the scenario for getting data
and not for executing code..."Loading a DLL as a Data File or Image
Resource":
https://msdn.microsoft.com/en-us/library/ms684179(v=vs.85).aspx
LOAD_LIBRARY_AS_DATAFILE
LOAD_LIBRARY_AS_IMAGE_RESOURCE

Possibly the intention here for loading legacy gtk strings, gtk icons,
other gui gtk resources from the win32 version gtk dll.

It is clear that you may not execute win32 code from win64 apps.  You
may only invoke an entire separate win32 process that may run win32 apps
and load win32 executeable dll's but they run entirely in a separate
process INACCESSIBLE FROM ANY WIN64 DLL/EXE.  There ARE EXCEPTIONS...If
you write a service...if you write devices drivers.  For your case,
these two exceptions may be considered if you use some clever
circumvention techniques, but they require unexpected amounts of effort.

I have seen in win32...when you pass data structure pointers via local
in-process COM or out-of-process COM(to other processes) you can get
away with sending it as a LPVOID and recasting it on the other end with
the expected pointer to a structure type.  Doing something like this was
possible with win32 <<-->> win16.  I imagine it may be possible from
win32 <<-->>win64 but it's highly undocumented and the os/anti-virus
will probably complain unless you turn off ASLR when compiling/linking.
I've never done that because that implies throwing away recommended
security guidelines.  I heard that internet explorer does use both win32
code dlls and win64 code dlls. hmmm....
http://www.w4rri0r.com/sequence-of-commands/exploit-windows-32-bit-and-64-bit-application.html


On 01/23/2017 11:54 AM, Antoine Martin wrote:
> On 23/01/17 22:31, David Macek wrote:
>>> On 23. 1. 2017 13:58, Antoine Martin wrote:
>>>> Hi,
>>>>
>>>> It seems that the 64-bit version of the gtkglext package is missing
>>>> something as we are unable to load one of the DLL it installs:
>>>>
>>>> pacman -S mingw-w64-x86_64-gtkglext
>>>> python -c 'from ctypes import
>>>> cdll;cdll.LoadLibrary("C:\\msys64\\mingw64\\bin\\libgdkglext-win32-1.0-0.dll")'
>>>>
>>>> fails with:
>>>> WindowsError: [Error 127] The specified procedure could not be found
>>>>
>>>> The 32-bit version does not have this problem.
>>>> ldd doesn't show anything missing, depends.exe does show some problems
>>>> with libgdk_pixbuf - but I'm not sure I trust this ancient tool.
>>>> (and gdk_pixbuf is there of course)
>>
>> Manual inspection showed that the DLL is trying to import `DllMain` from 
>> libgdk_pixbuf-2.0-0.dll, which it does not export. The 32-bit version has 
>> got no such import entry.
> A quick googling hits this:
> https://github.com/mirror/mingw-w64/blob/master/mingw-w64-crt/crt/dllmain.c
> 
> So I guess that it might be enough to link against it?
> I just don't understand why the 64-bit version would need this
> explicitly when the 32-bit build does not.
> 
>>>> Questions:
>>>> * what is the best way to check that a DLL is valid and has all its
>>>> required dependencies installed? (I use python here but surely there is
>>>> a better way?)
>>
>> I don't know any reliable general-purpose way. Seems like only ctypes and 
>> depends find the issue.
>>
>>>> * can I trace the DLL loading to see where it is failing?
>>
>> You can try `ntldd`, `ldd`, `cygcheck`, `depends`, all with varying degrees 
>> of success, YMMV.
>>
>>>> * since this problem does not affect the 32-bit version, it is fair to
>>>> assume that something is going wrong during building / linking - are
>>>> there any specific gotchas to look for?
>>
>> Sometimes an accident happens and there are bad packages (sometimes only on 
>> one architecture), so it's good to ask if others have the same problem. I 
>> can confirm this happens to me as well. If I run an appropriate command 
>> outside MSYS2 (i.e. in plain cmd), I even get an error saying it's `DllMain` 
>> that's missing.
>>
>> In conclusion, it seems some package(s) require(s) re-building. You should 
>> probably open a ticket on <http://github.com/alexpux/mingw-packages>.
> Thanks. Done:
> https://github.com/Alexpux/MINGW-packages/issues/2121
> 
> As noted there, I've tried building from source but that didn't make any
> difference.
> 
> Cheers
> Antoine
> 
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, SlashDot.org! http://sdm.link/slashdot
> _______________________________________________
> Msys2-users mailing list
> Msys2-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/msys2-users
> 


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Msys2-users mailing list
Msys2-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/msys2-users

Reply via email to