dbghelp detached from wine into standalone windows dll...
Tarmo Pikaro
tapika at yahoo.com
Wed Jun 5 14:18:18 CDT 2019
On Wednesday, June 5, 2019, 10:44:25 AM GMT+3, Alexandre Julliard <julliard at winehq.org> wrote:
Tarmo Pikaro <tapika at yahoo.com> writes:
>> Other stuff like missing WideCharToMultiByte can be
>> addressed by providing the missing functions in your own separate object
>> file, without changing the source.
>
> I've scanned quite many unicode libraries and concluded of bringing up cutf library alive - that is basically a replacement for
> WideCharToMultiByte & windows api - uses less call arguments, but can achieve stuff.
>
> My point is that you can write a simple WideCharToMultiByte wrapper on
> top of your cutf library, and then you don't need to patch dbghelp at
> all, only to link it against your wrapper.
I think wrapping can go in either direction, but you must admit that writing:
len = utf8zestimate(searchPath);
is shorter than:
len = MultiByteToWideChar(CP_ACP, 0, searchPath, -1, NULL, 0);
by 6-1 = 5 parameters,
and this form:
utf8ztowchar(searchPath, sp, len);
is also shorter than:
MultiByteToWideChar(CP_ACP, 0, searchPath, -1, sp, len);
by 6 - 3 = 3 parameters.
What I'm afraid is usage of active code page (CP_ACP), which might be run-time configured via some locale command.
I have tried to search some documentation on active PE structures, but could not find any - suspect it's relatively ancient structures without decent documentation. Made once upon a time as ascii, and never were designed from unicode perspective.
Btw - windows C++ provides such classes as CA2W(), CW2A() - it can give even shorter form - wondering if dbghelp can be upgraded to C++ ? (pros / cons?)
> I would like to head into direction of having only one compilation instead of multiple -
> https://www.reddit.com/r/cpp/comments/bjgt0j/make_portable_dll_without_second_compilation/
>
> basically replace .so & .dll file format with one centralized file format, which can be run on multiple platforms. (e.g. linux and windows)
>
> Please don't tell me it will be a long way to get there, I know that - but there already exists prototypes
> who managed to make this happen. I think wine's dbghelp is good place to start from, but
> we might indeed require native compilers support, need to locate good guys for this job.
> The file format is not the interesting part, it's easy to do a PE loader
> on Linux, or an ELF loader on Windows. You could probably also write a
> PE<->ELF converter without too much trouble.
> The thing is once you have loaded the binary, it's going to call APIs,
> and these are completely different between platforms. So you need either
> an abstraction layer to wrap all the APIs, or something like Wine to
> make the APIs compatible. That's where the real work is.
Yes, but I would like to start from basics - enable functionality initially, and worry about which dllexports and what later on. I think we could have even our own (application) specific "standard" API.
Btw - I have tried to load from wine / LoadLibrary linux shared object, but could not. Tried something like this:
void stackCallbacker() { printf("%s", g3::internal::stackdump().c_str()); }
typedef void(*func)(void); typedef void(*fcallFunc)(func);
int main(int argc, char **argv) { //HMODULE h = LoadLibraryA("dll.dll"); const char* dllName = "dll"; //const char* dllName = "/mnt/c/Prototyping/dbghelp2_dev2/bin/Release_x86/dll.so"; HMODULE h = LoadLibraryA(dllName); if (h == 0) { printf("Failed to load '%s'\n", dllName); return 0; }
fcallFunc fc; *((FARPROC*)&fc) = GetProcAddress(h, "DoTestCall");
printf("Calling dll -> DoTestCall ...\n"); fc(stackCallbacker); printf("call ok.");
But wine refuses to load dll.so by relative or absolute path. Does wine supports this ?
--
Alexandre Julliard
julliard at winehq.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20190605/a63f7304/attachment-0001.html>
More information about the wine-devel
mailing list