在 Nim 中使用前向声明的原型分配函数指针
Assigning a function pointer with a forward-declared prototype in Nim
我想将 Window 过程分配给 Window Class 结构:
var wndClass : WNDCLASS;
wndClass.lpszClassName = CLASSNAME;
wndClass.lpfnWndProc = WndProc;
wndClass.hInstance = hInstance;
我还不能分配 WndProc,因为它还没有声明。当我使用前向声明时(描述为here):
proc WndProc(hWnd: HWND; msg: WINUINT; wParam: WPARAM; lParam: LPARAM) : LRESULT
我收到这个错误:
Error: type mismatch: got (None) but expected 'WNDPROC'
我的前向声明是错误的,还是这种情况我必须先写函数?
编辑:
作为参考,以下代码在全局范围内有效:
proc Foo : int32;
var bar = Foo();
var baz = Foo;
echo bar;
echo baz();
proc Foo : int32 =
return 4;
可以在此处找到 WNDCLASS 和 WNDPROC 的定义:
http://nim-lang.org/windows.html
问题在于,即使 WNDPROC 的类型定义包含编译指示,您也必须在前向声明中重复它们。
此代码编译:
import windows
proc WndProc(hWnd: HWND; msg: WINUINT; wParam: WPARAM; lParam: LPARAM) : LRESULT {.stdcall.}
var wndClass : WNDCLASS;
wndClass.lpfnWndProc = WndProc;
proc WndProc(hWnd: HWND; msg: WINUINT; wParam: WPARAM; lParam: LPARAM) : LRESULT = 0
顺便说一句,如果您尝试通过在文件中包含类型来重现该问题,则会因不区分大小写而失败。
我想将 Window 过程分配给 Window Class 结构:
var wndClass : WNDCLASS;
wndClass.lpszClassName = CLASSNAME;
wndClass.lpfnWndProc = WndProc;
wndClass.hInstance = hInstance;
我还不能分配 WndProc,因为它还没有声明。当我使用前向声明时(描述为here):
proc WndProc(hWnd: HWND; msg: WINUINT; wParam: WPARAM; lParam: LPARAM) : LRESULT
我收到这个错误:
Error: type mismatch: got (None) but expected 'WNDPROC'
我的前向声明是错误的,还是这种情况我必须先写函数?
编辑:
作为参考,以下代码在全局范围内有效:
proc Foo : int32;
var bar = Foo();
var baz = Foo;
echo bar;
echo baz();
proc Foo : int32 =
return 4;
可以在此处找到 WNDCLASS 和 WNDPROC 的定义: http://nim-lang.org/windows.html
问题在于,即使 WNDPROC 的类型定义包含编译指示,您也必须在前向声明中重复它们。
此代码编译:
import windows
proc WndProc(hWnd: HWND; msg: WINUINT; wParam: WPARAM; lParam: LPARAM) : LRESULT {.stdcall.}
var wndClass : WNDCLASS;
wndClass.lpfnWndProc = WndProc;
proc WndProc(hWnd: HWND; msg: WINUINT; wParam: WPARAM; lParam: LPARAM) : LRESULT = 0
顺便说一句,如果您尝试通过在文件中包含类型来重现该问题,则会因不区分大小写而失败。