我们使用 Lua (www.lua.org) 脚本让用户自定义我们用 C++ 编写的服务器软件。
目前我们正在将项目的 32 位 Windows 版本移植到 Visual Studio 2010。一旦在 VS 2008 上一切正常,我们认为升级过程不会有问题。
不幸的是,每当我们在 VS 2010 中尝试将 lualib(作为 dll)链接到我们的项目时,链接器都找不到 lua 函数(错误消息如下所示)。
似乎某些调用约定在 2010 年是错误的,例如应用程序可能正在寻找带有前缀“_”的 lua 函数。
要从我们的项目模块 (C++) 访问 lua 函数(用 C 编写),我们使用:
extern "C" {
#include "lua/src/lua.h"
#include "lua/src/lualib.h"
#include "lua/src/lauxlib.h"
}
Run Code Online (Sandbox Code Playgroud)
同一个项目在 VS 2008 和 Linux (g++) 上成功编译并与 lualib 链接。
有人可以帮我解决这个问题吗?
1>dscscript.obj : error LNK2019: 函数“public: int __thiscall DsCScriptEngine::Init(void)”中引用的未解析的外部符号__imp__luaL_openlibs (?Init@DsCScriptEngine@@QAEHXZ) 1>dscscript.obj : error LNK2019: 函数“public: int __thiscall DsCScriptEngine::Init(void)”中引用的未解析的外部符号__imp__luaL_newstate (?Init@DsCScriptEngine@@QAEHXZ) 1>dscscript.obj : error LNK2019: 函数“public: …
我在用C编写的Lua模块中有一个完整的用户数据__gc()
.userdata 有metamethod,由垃圾收集器调用.lua是否在__gc()
通话后解释了免费的用户数据内存,或者我是否需要free()
在内部使用它__gc()
?
我在其中一个fortran函数中初始化了一个变量.我在另一个功能中使用它.但价值并不相同.在其他函数调用我得到垃圾值.我如何保持初始值.
例如:
entry a() num_calls=0 entry b() num_calls= num_calls + 1
从条目"b"我得到num_calls作为一些垃圾
我在NVIDIA的CUDA SDK示例中找到了此代码.
void computeGold( float* reference, float* idata, const unsigned int len)
{
reference[0] = 0;
double total_sum = 0;
unsigned int i;
for( i = 1; i < len; ++i)
{
total_sum += idata[i-1];
reference[i] = idata[i-1] + reference[i-1];
}
// Here it should be okay to use != because we have integer values
// in a range where float can be exactly represented
if (total_sum != reference[i-1])
printf("Warning: exceeding single-precision accuracy. Scan will be inaccurate.\n");
}
//(C) Nvidia …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Lua的os.execute()
函数运行可执行文件.如果我做了类似下面的事情它不起作用:
os.execute("C:\\\Program Files\\\Movie Maker\\\moviemk.exe")
Run Code Online (Sandbox Code Playgroud)
但是,如果我把我的lua文件放在同一个路径中moviemk.exe
,那么就可以调用它.
任何想法为什么会这样?
PS我正在使用Windows XP SP3
我正在为嵌入式设备工作C固件程序.我想通过串口发送一个十六进制字符值数组.有没有一种简单的方法将值转换为ASCII十六进制?
例如,如果数组包含0xFF,我想发送ASCII字符串"FF",或者对于十六进制值0x3B我想发送"3B".
这通常是怎么做的?
我已经有了串行发送功能,所以我可以这样做......
char msg[] = "Send this message";
SendString(msg);
Run Code Online (Sandbox Code Playgroud)
并且SendString函数为传递的数组中的每个元素调用此函数:
// This function sends out a single character over the UART
int SendU( int c)
{
while(U1STAbits.UTXBF);
U1TXREG = c;
return c;
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个可以让我这样做的功能......
char HexArray[5] = {0x4D, 0xFF, 0xE3, 0xAA, 0xC4};
SendHexArray(HexArray);
//Output "4D, FF, E3, AA, C4"
Run Code Online (Sandbox Code Playgroud) 在Lua语言中,我能够在表格中定义诸如的函数
table = { myfunction = function(x) return x end }
Run Code Online (Sandbox Code Playgroud)
我想知道我是否可以用这种方式创建方法,而不是像我这样做
function table:mymethod() ... end
Run Code Online (Sandbox Code Playgroud)
我很确定可以用这种方式添加方法,但我不确定这种技术的正确名称,我找不到它寻找"lua"和"方法"等.
我的目的是将表传递给诸如的函数myfunction({data= stuff, name = returnedName, ?method?init() = stuff})
.
不幸的是,我尝试了几种冒号方法声明的组合,但它们都不是有效的语法.
那么......这里有人碰巧知道吗?
几个月前我找到了一个公式,我自己将任何源语言(计算机字符)翻译成目的地(计算机字符).使用Lua(桌面用户)和C++类(用于本机访问),以便我可以将其嵌入Web浏览器等等.我想知道我们是否已经在C++或Lua中有更好的东西.
我有时真的没有正确地翻译语法甚至规则,在构建它之前我认为我的最好的方法是完成它,但它现在已经很长时间了,我担心它可能会成为错误的实现.现在我想查看其他人并比较我的.
我使用谷歌翻译或其他不是我的目标,我正在建立一个翻译引擎(如谷歌或其他人),有人可以把字典和创建规则.
是否有任何现有的翻译框架或库(OpenCOG或Moses)为目标做源语言?例如:阿拉伯语为中文,英文为日文?或谷歌/其他人使用的是什么?
任何建议将不胜感激
提前致谢.
Keil C51 中 8051 微控制器的bit
和关键字有什么区别?sbit
何时应该sbit
使用以及什么时候使用bit
?
一些例子会很有帮助。