dfl icon indicating copy to clipboard operation
dfl copied to clipboard

Calling CoInitialize fails when linking with DFL static library

Open ghost opened this issue 12 years ago • 1 comments

Test-case:

module test;

pragma(lib, "Ole32");
import std.exception;
import dfl.internal.wincom;

void main()
{
    enforce(!CoInitialize(null));
    scope(exit) CoUninitialize();
}

$ rdmd --force -m32 -I.. test.d

The above works. But the following fails:

$ dmd -m32 -I.. test.d dfl.lib && test.exe [email protected](9): Enforcement failed

CoInitialize returns 1 when linking with the pre-built library.

Using Windows 7.

ghost avatar Mar 23 '13 00:03 ghost

...??? has the rdmd bug? I don't know the reason.

2013/3/23 Andrej Mitrovic [email protected]

Test-case:

module test; pragma(lib, "Ole32");import std.exception;import dfl.internal.wincom; void main(){ enforce(!CoInitialize(null)); scope(exit) CoUninitialize();}

$ rdmd --force -m32 -I.. test.d

The above works. But the following fails:

$ dmd -m32 -I.. test.d dfl.lib && test.exe [email protected](9): Enforcement failed

CoInitialize returns 1 when linking with the pre-built library.

Using Windows 7.

— Reply to this email directly or view it on GitHubhttps://github.com/Rayerd/dfl/issues/35 .

重森晴樹 (SHIGEMORI, Haruki) e-mail: [email protected]

Rayerd avatar Oct 20 '13 14:10 Rayerd

Is it because you are linking both ole32.lib and dfl.lib?

import std.stdio;
import std.exception;

static if (true) {
	pragma(msg, "Link ole32.lib");
	pragma(lib, "ole32.lib");
	import core.sys.windows.com;
}
else {
	pragma(msg, "Link dfl.lib");
	pragma(lib, "dfl.lib");
	import dfl.internal.wincom;
}

void main() {
	scope(exit) {
		writeln("Call CoUninitialize().");
		CoUninitialize();
	}
	writeln("Call CoInitialize().");
	enforce(!CoInitialize(null));
}
>dmd -m32omf main.d && main
Link ole32.lib
Call CoInitialize().
Call CoUninitialize().
 
>dmd -m32omf main.d && main
Link dfl.lib
Call CoInitialize().
Call CoUninitialize().
 
>rdmd --force -m32omf main.d
Link dfl.lib
Link dfl.lib
Call CoInitialize().
Call CoUninitialize().
 
>rdmd --force -m32omf main.d
Link ole32.lib
Link ole32.lib
Call CoInitialize().
Call CoUninitialize().

Rayerd avatar Nov 24 '22 10:11 Rayerd