【问题标题】:Why does this pointer throw Access violation?为什么这个指针会引发访问冲突?
【发布时间】:2019-01-01 16:38:57
【问题描述】:

我尝试在我的代码中翻译一个指针。但它会引发访问冲突。

我在网上尝试了很多方法,但都失败了。

主程序:

createthread(nil,0,@make,@cli,0,tmp);//cli is a longint

以及制作过程:

procedure make(a:pointer);
var
 c:longint;
begin
 c:=PLongint(a)^;
 //here throw Access violation

 ...
end;

我希望得到指针a中的数字,我该怎么做?

【问题讨论】:

    标签: windows pointers pascal


    【解决方案1】:

    要从 Pascal 成功调用 C 函数(如 Win32 CreateThread() API),您需要做几件事。

    其中一个设置了正确的调用顺序:stdcall

    其他是让指针正确(你原来的问题)。

    另一个问题是确保 C 函数声明的大小写正确(例如 CreateThread,而不是 createthread

    您没有向我们展示您的 Pascal 声明,也没有告诉我们您使用的是什么 Pascal 编译器。

    如果您使用的是 Borland Pascal、Delphi 或 FreePascal,请在此处查看有关从 Pascal 调用 C 的详细信息(反之亦然):

    http://www.drbob42.com/delphi/headconv.htm

    但是,如果您使用这三个 Pascal 中的任何一个,请考虑查找现有的 Pascal“线程”API,而不是创建自己的包装器。

    希望对你有帮助……

    【讨论】:

    • 您的“调用顺序”通常称为“调用约定”。更多关于我的这篇文章的主题:Pitfalls of converting.
    猜你喜欢
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多