小编Rod*_*ddy的帖子

如何设置Lua块的chunkname?

我目前正在使用C API调用luaL_loadstring()来加载一个块,但是这个调用没有一种命名块的方法.

是否有一种方法可以在加载后命名一个块?

或者,我看到该lua_load()函数采用chunkname参数,但我没有找到如何使用它的任何示例:如何luaL_loadstring()lua_load()?替换调用?

lua chunks

3
推荐指数
1
解决办法
664
查看次数

如何将 TFileStream 与 FILE_SHARE_DELETE 一起使用?

这个QC报告说Delphi不支持文件共享模式FILE_SHARE_DELETE

http://qc.embarcadero.com/wc/qcmain.aspx?d=45628

我需要将这种模式与 TFileStreams 一起使用 - 谁能想到一种不涉及修改库代码或从库中复制大量内容的简单解决方法?

delphi winapi tfilestream

3
推荐指数
1
解决办法
228
查看次数

如何使用Indy10 TIdUDPClient接收广播数据包?

我正在连接到一个发送UDP数据包的系统,作为响应(发送到特定IP地址)和广播(根据WireShark,目标255.255.255.255)

我可以正确接收'直接'数据包,但我无法弄清楚如何获得广播数据包.我假设我需要第二个具有不同绑定的TIdUDPClient,但我无法让它工作.

TIdUDPClient *reader(new TIdUDPClient(NULL));
TIdUDPClient *broadcastReader(new TIdUDPClient(NULL));

reader->Port = 2000;
reader->Host = "192.168.0.1";
reader->Connect();

broadcastReader->Port = 2000;
// broadcastReader->Host = "0.0.0.0"; // This doesn't work, but is here as an example
broadcastReader->BroadcastEnabled = true;
broadcastReader->Connect();
Run Code Online (Sandbox Code Playgroud)

然后,我有其他几乎相同的线程调用reader/broadcastReader->ReceiveBuffer().在reader一个工作正常,但broadcastReader->receiveBuffer()不会返回......

为C++代码和Delphi标签道歉;-)

delphi udp c++builder indy10

3
推荐指数
1
解决办法
4471
查看次数

为什么TDateTime计算涉及变体?

下面的简单示例代码,包含生成的汇编程序.我很惊讶生成的代码涉及变体.Delphi当然不具备.

TDateTime t1;
TDateTime t2;
...
int x =  2 * (t2 - t1);
Run Code Online (Sandbox Code Playgroud)

生成的代码.

Unit23.cpp.18: int x =  2 * (t2 - t1);
00401814 66C745C82400     mov word ptr [ebp-$38],$0024
0040181A 8D45DC           lea eax,[ebp-$24]
0040181D E852180000       call $00403074
00401822 50               push eax
00401823 FF45D4           inc dword ptr [ebp-$2c]
00401826 8D55A8           lea edx,[ebp-$58]
00401829 8D45A0           lea eax,[ebp-$60]
0040182C E8FB000000       call System::TDateTime::operator -(const System::TDateTime &)
00401831 DD5D94           fstp qword ptr [ebp-$6c]
00401834 8D5594           lea edx,[ebp-$6c]
00401837 8D45EC           lea eax,[ebp-$14]
0040183A E8F1180000       call …
Run Code Online (Sandbox Code Playgroud)

c++builder variant tdatetime

3
推荐指数
1
解决办法
78
查看次数

RapidXML提供空的CDATA节点

我编写了下面的代码来获取CDATA节点值,我得到了节点的名称,但值是空白的.

我将解析Flags更改为parse_full,但它也没有用.

如果我从XML中手动删除"<![CDATA ["和"]]>",它会按预期提供值,但在解析之前删除它不是一个选项.

代码:

#include <iostream>
#include <vector>
#include <sstream>
#include "rapidxml/rapidxml_utils.hpp"

using std::vector;
using std::stringstream;
using std::cout;
using std::endl;

int main(int argc, char* argv[]) {

    rapidxml::file<> xmlFile("test.xml");
    rapidxml::xml_document<> doc;
    doc.parse<rapidxml::parse_full>(xmlFile.data());

    rapidxml::xml_node<>* nodeFrame = doc.first_node()->first_node()->first_node();

    cout << "BEGIN\n\n";

    do {

        cout << "name:  " << nodeFrame->first_node()->name() << "\n";
        cout << "value: " << nodeFrame->first_node()->value() << "\n\n";


    } while( nodeFrame = nodeFrame->next_sibling() );

    cout << "END\n\n";

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

XML:

<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0" xmlns:c="http://base.google.com/cns/1.0">
<itens>
   <item>
    <title><![CDATA[Title 1]]></title>  
    <g:id>34022</g:id>
    <g:price>2173.00</g:price> …
Run Code Online (Sandbox Code Playgroud)

c++ rapidxml c++11

3
推荐指数
1
解决办法
1481
查看次数

使用#include指令尾随字符

我在源文件中看似无关紧要

#include <some_sys_header_file.h>"
Run Code Online (Sandbox Code Playgroud)

它被埋在一堆其他包含使用双引号(而不是尖括号)的内容中,因此没有发现虚假的双引号.

编译器(或者更确切地说,预处理器)很高兴,包括所需的文件,并跳过了剩下的行.

但是,在使用艺术风格格式化文件时,双引号导致文字字符串错误地分割为多行的混乱.

是否应该如何对待这个标准?

c code-formatting language-lawyer c-preprocessor

3
推荐指数
1
解决办法
85
查看次数

C++构造函数编码错误

我在一些遗留代码中偶然发现了这个错误:

class MyAPIHandler
{
    private:
     int handle;
    public:
    void MyApiHandler()  // default constructor
    {
        handle = 42;
    };
};
Run Code Online (Sandbox Code Playgroud)

编译很好,没有警告 - 但行为不是我想要的,因为构造函数名称是拼写错误.这本身就会产生关于"函数不返回值"的警告,但我想我是在自动驾驶上并添加了一个"void"返回类型来"修复"这个.

现在,错误修复很容易,但我的问题是: -

我可以使用哪些技术来防止此类错误再次发生?

有些语言需要一个明确的"构造函数"关键字,这应该会使这个问题变得明显.单元测试,显然也应该抓住它.我还可以做些什么?

c++ constructor

2
推荐指数
1
解决办法
670
查看次数

如何指定从Delphi TStream读取的组件的所有者?

我正在从流中读取组件,并希望能够指定Owner属性.

  var TComponent : comp;

  stream.Seek(0, soFromBeginning);
  comp := stream.ReadComponent(nil);
Run Code Online (Sandbox Code Playgroud)

谁拥有comp,我该如何改变呢?我希望readComponent的参数是所有者,但它似乎做了一些完全不同的事情!

delphi streaming components

2
推荐指数
1
解决办法
677
查看次数

如何访问非可视Delphi组件的设计位置?

在IDE中设计表单时,可以自由放置和定位非可视组件(例如TMainMenus,TDatamodules).该位置是持久的,因此在重新加载表单时,这些组件会出现在正确的位置.

但是,TComponent没有Top或Left属性!

那么,我的代码如何访问非可视组件的"设计位置"?

delphi tcomponent

2
推荐指数
1
解决办法
822
查看次数

为什么智能指针没有转换操作符回到基指针?

如果经常发现自己使用这样的代码:

boost::scoped_ptr<TFoo> f(new TFoo);

Bar(f.get());  // call legacy or 3rd party function : void Bar (TFoo *)
Run Code Online (Sandbox Code Playgroud)

现在,我认为智能指针可以轻松地将隐式转换运算符定义回"原始"指针类型,这将允许此代码仍然有效,并简化旧代码的"智能化"

Bar(f);
Run Code Online (Sandbox Code Playgroud)

但是,它们至少不是,而不是我发现的那些.为什么?

c++ smart-pointers scoped-ptr

2
推荐指数
1
解决办法
683
查看次数