On Tue, 01 Mar 2011 02:08:48 +0300, Tyro[a.c.edwards] <nos...@home.com> wrote:

== Quote from Denis Koroskin (2kor...@gmail.com)'s article
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.

Actually I've already tried that, it has no effect on the outcome.
From your suggestion though, I've gone back and replace all the
cast(const(char*)) usage throughout the program. Final verdict:
the program still crashes it the same location. It actually never
returns from CreateWindowExA().

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)


This is indeed strange, but it has nothing to do with the function itself. I still think the parameters you are passing might be invalid. Try setting them to default values and see if that helps. Also try wrapping the call with a try/catch block and output an exception you are getting (if any).

Reply via email to