1、应单位需要,我要做一个微型的数据库系统(嵌入式系统用),想了解一下一般数据文件的存贮结构,请问哪儿有相关的资料?2、我用Delphi做了个带窗体的dll库(一个硬件仿真器),然后我在C中调用它,不过用的是控制台界面,没有窗口(当然没有窗口句柄了),问题是我如何激活这个dll库中的窗体并使它能接收系统消息(用Form.ShowModal会停止C中代码的执行直到并闭Form,而如果用Form.Show没法使Form接收系统消息),我该如何进行设置?下面是dll的接口代码:library VirDevice;
uses
  SysUtils,
  Classes,
  Forms,
  V_LCD12232 in 'V_LCD12232.pas' {LCD_12232};{$R *.res}typevar
  Bak_ExitProc: Pointer;procedure DoExit;
begin
  LCD_12232.Free;
  ExitProc := Bak_ExitProc;
end;procedure ProcessCommand(Command: Word); stdcall;
begin
  LCD_12232.ProcessCommand(Command);
end;Exports
  ProcessCommand;// 因为是仿真器,所以我希望在初始化时就建好窗口,而后可以在C代码的控制下进行仿真操作
begin
  Bak_ExitProc := ExitProc;
  ExitProc := @DoExit;
  LCD_12232 := TLCD_12232.Create(Application);
  LCD_12232.Show;
  // LCD_12232.ShowModal;
end.

解决方案 »

  1.   

    第一个问题,用gdbm,不要自己实现了。
      

  2.   

    to shornmao:
    如果只是在linux系统下可能这是个不错的选择,可如果我用在无操作系统的环境中如何办呢?(比方说我用Flash来直接存数据)我的目的是要小,通用性好,速度快,只是简单的单机使用,不用SQL……
      

  3.   

    to lbsjs:
    什么意思? 这里星级大虾应该不少啊?!
      

  4.   

    你看一看gdbm的文档再说,它并不要求操作系统的支持,是可以移植的,而且并没有提供数据库方面的支持,只是提供了key的管理而已,你还是要在这个基础上自己增加数据库管理方面的接口的。
    完全的嵌入式db也有很多,到sourceforge.net上找一找就有了。
      

  5.   

    问题是你贴出地方了!
    作为Delphi,你该到Delphi专区去,而不是在这里。
    另外,这里的人对你的问题并不了解:你是要改你手中Delphi代码呢,还是要提供C的代码?
    在有一点,C的控制台程序是什么概念,不甚了了。因为到这里来的人他会告诉你直接用BCB来完成你得Form及数据库操作,根本无须其它,除非你有足够明确的理由,不然很少有人愿意跟在你后面绕弯子。
      

  6.   

    我只是作了个简单的调用,因为我不知道句柄,所以没法把句柄给DLLhLibrary = LoadLibrary("VirDevice.dll");
    CommFunc = (pCommand)GetProcAddress(hLibrary, "ProcessCommand");
    if(CommFunc!=NULL){
      (*CommFunc)(IOData);
      (*CommFunc)(IOData&(~IO_EN));
    }Form.Show能显示,用Application.ProcessMessage()也能被动地接收一下消息,但调用完成后窗口就无法继续获得交点了.我该如何做?
      

  7.   

    你在每次响应视图时重新调用Dll库不行吗?
    我觉得,如果单一的方法你可以实现,那么多次的就不该很困难,至少你可以采用这样两种方法:一是采用计数器定时地检查数据更新情况,二是采用消息机制来追踪数据更新;另外,就是你的数据获取的方式,你可以将其放入独立的刷新函数里,这样,不仅可以被Show事件触发,也可以被计数器、鼠标、键盘等等一系列的希望响应的事件所触发。
    由于不能确定你的问题实际出在何处,仅能提供一个简单的思路,供参考。
      

  8.   

    请注意了,我是一个仿真器,也就是说它应该是独立与任何一个应用软件的,即不应该由应用软件来刷新它,而要由它自已来获得系统消息.
    再有,我用的是DLL,它没有自已的堆栈空间,它必须挂在另一个进程中执行,如果我不能把进程的句柄给他,我如何让它独立的获得系统消息?我试过,在DLL中放置的定义器或是独立线程中使用Application.ProcessMessage()是不可能有作用的.