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)

Reply via email to