function-pointers - 在 Nim 中使用前向声明的原型(prototype)分配函数指针

标签 function-pointers forward-declaration nim-lang

我想将一个窗口过程分配给一个窗口类结构:

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 的类型定义包含 pragma,您也必须在前向声明中重复它们。

此代码编译:

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

顺便说一句,如果您尝试通过在文件中包含类型来重新创建问题,则会因为不区分大小写而失败。

关于function-pointers - 在 Nim 中使用前向声明的原型(prototype)分配函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29969252/

相关文章:

C++:匿名结构的结构前向声明导致 "conflicting declaration"

arrays - 如何在 Nim 中连接两个数组?

types - "static type"和 "dynamic type"怎么可能不同?

c++ - 类的非静态成员函数的函数指针

c++ - 虚函数比函数指针更安全吗?

objective-c - 子类化时的前向声明与#import

nim-lang - 通用过程的 nim 类型定义是什么?

c++ - 如何在不指定模板的情况下声明函数模板指针typedef?

C:代码重复示例

c++ - 不完整类型的无效使用(嵌套类案例)