On Mon, 28 Feb 2011 19:35:47 +0300, Tyro[a.c.edwards] <nos...@home.com>
wrote:
On 2/28/2011 11:08 PM, J Chapman wrote:
== Quote from Tyro[a.c.edwards] (nos...@home.com)'s article
Both implementations results in error code 1812 being returned from
GetLastError. explanation of the code reads:
ERROR_RESOURCE_DATA_NOT_FOUND
1812 (0x714)
The specified image file did not contain a resource section.
The code I'm porting initially consisted of a resource.h file, a
generic.rc file and two icons. I have not tried to include the icons
and
generic.rc file in the compilation because I do not know how to as yet
and I've only used half of the resource.h file: didn't think I need the
whole thing. Could this be the reason for the error? If so could you
direct me to the explanation of how to prepare these files for
inclusion
in the compilation process?
Thanks,
Andrew
You need to compile the .rc file (see
http://www.digitalmars.com/ctg/rcc.html), then add the resulting .res
file
to dmd's command line.
Awesome, this does the trick. However I get get a "GP Fault"? during
execution. Using windbg, I tracked it down to this piece of code:
void Create()
{
_hwnd = CreateWindowExA(
_exStyle,
cast(const(char*))_wc.GetName(), // returns string
cast(const(char*))_windowName, // string variable
_style,
_x,
_y,
_width,
_height,
_hWndParent,
_hMenu,
_wc.GetInstance(),
_data);
assert(_hwnd, "Internal error: Window Creation Failed.");
}
The program craps at assert() but the error is generated. It just
displays a dialog box with the message: "test.exe has stopped working,
Windows is checking for a solution to the problem..."
I'm thinking that _hwnd was never initialized and that assert is access
a null pointer but I cannot be sure. Any suggestions or ideas?
The
cast(const(char*))_wc.GetName()
line look *very* suspicious. You can't get a string and just cast it to
const(char)*. Most importantly, the string (most likely) is not
null-terminated.
What you need to do here is the following:
auto className = toStringz(_ws.GetName());
auto caption = toStringz(_windowName);
and pass those 2 to the function.
Alternatively, you could make sure your strings are null-terminated and
pass the pointer directly (e.g. _windowName.ptr):
string _windowName = "foo"; // null-terminated automatically
string _caption = ("Hello, World" ~ "\0")[0..$-1]; // append trailing zero
to an existing string but exclude it from result (so that it's not
included in _caption.length)