gpt4 book ai didi

c++ - 为什么我的 Game Maker DLL 出现访问冲突?

转载 作者:太空宇宙 更新时间:2023-11-04 11:41:21 26 4
gpt4 key购买 nike

我找到了一个 tutorial关于制作你的第一个 C++ DLL,我想通过制作一个计算特定频率的 Octave 数的函数来尝试。我首先尝试了示例函数,将两个值相乘,结果成功了。然后我将我首先在标准 C++ 项目中测试的计算函数放入 DLL 代码中。现在,当我想调用 Game Maker 中的函数时,它会给我 this popup当我单击“确定”按钮时,程序挂起。有谁知道什么会导致这种访问冲突?

编译器信息:我将 NetBeans IDE 7.3 与 Cygwin 4 (gcc) 结合使用。在 Windows 7 上编译和测试。

动态链接库代码:

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
#include <cstdio>
#include <windows.h>

#define GMEXPORT extern "C" __declspec (dllexport)

double A440 = 440;

GMEXPORT double __cdecl SampleFunction(double a, double b) {
return a * b;
}

GMEXPORT int __cdecl freqGetOctave(double f) {
double a = 12*log2(f/(A440/16))+.505;
int c = (int)(a+9)/12;
return c;
}

游戏制作者代码:

//script: dll_init
globalvar _exmpl,_freq;
var dll_name;
dll_name = "c:\Users\<me>\Documents\NetBeansProjects\GMDLLtest\dist\Debug\Cygwin_4.x-Windows\libGMDLLtest.dll";
_exmpl = external_define(dll_name, "SampleFunction", dll_cdecl, ty_real, 2, ty_real, ty_real);
_freq = external_define(dll_name, "freqGetOctave", dll_cdecl, ty_real, 1, ty_real);

//script: example
return external_call(_exmpl,argument0,argument1);

//script: freq_octave
return external_call(_freq,argument0);

//Watch Excpressions in Debug Screen:
example(3,3) 9
freq_octave(440) [error popped up:]

// [Access violation at address 00405B33 in module 'DLLtest.exe'.
// Read of access 00000004.]

最佳答案

关于这些导出函数:

Plug-in functions must have a specific format. They can have between 0 and 16 arguments, each of which can either be a real number (double in C) or a null-terminated string. (For more than 4 arguments, only real arguments are supported at the moment.) They must return either a real or a null-terminated string.

你的返回一个整数,而不是 double 。 Game Maker 将尝试将该整数解释为 double ,这并不顺利。

关于c++ - 为什么我的 Game Maker DLL 出现访问冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21310524/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com