Calling CoInitialize fails when linking with DFL static library
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.
...??? 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]
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().