You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The following program crashes in the second invocation of AddRef (could be any other method defined by IUnknown or a derived interface) because the "this" pointer points to the IUnknown vtable instead of the object's base, which is assumed by the code.
---
import std.c.windows.com;
import std.c.windows.windows;
class Test : IUnknown {
int i = 1;
ULONG AddRef() { assert(i == 1); return 0; }
ULONG AddRef() { assert(i == 1); return 0; }
HRESULT AddRef(IID*, void**) { assert(i == 1); return E_FAIL; }
}
void main()
{
auto t = new Test;
t.AddRef(); // works
auto u = cast(IUnknown)t;
u.AddRef(); // crash in _d_invariant
}
---
Setting this to major severity because it makes defining any COM objects in D impossible on Win64 (and thus many COM APIs are unusable). Tested on DMD 2.063.2
The text was updated successfully, but these errors were encountered:
Sönke Ludwig (@s-ludwig) reported this on 2013-07-12T07:52:57Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=10622
Description
The text was updated successfully, but these errors were encountered: