小编Joh*_*ohn的帖子

如何扩展内存映射文件的长度?

在Delphi 7中,我使用CreateFileMapping打开一个文件,然后使用MapViewOfFile获取指针.

如何扩展内存并在内存中添加一些字符并将其保存到该文件中?

我已经用适当的模式(fmOpenReadWrite,PAGE_READWRITE)打开了文件,如果我覆盖了字符,它会被保存到文件中,但我需要在文件中间添加额外的值.

delphi winapi memory-mapped-files

4
推荐指数
1
解决办法
2351
查看次数

我不应该从线程中显示表单或消息框吗?

我一直在主线程中显示这些东西,并使用事件将窗口的末尾与线程同步,以便在窗口关闭时让它知道.

今天,在开发过程中,我想将显示的表单从线程移动到主UI,但它已成功显示.我添加的唯一内容是在主线程中我正在推送等待事件的消息:

procedure WaitWithMessageLoop();
var
vWaitForEventHandles:array[0..1] of THandle;
vWaitForResponse:DWORD;
Msg: TMSG;
begin
vWaitForEventHandles[0] := LServiceMonitor.Handle;
while (1=1) do
begin
  vWaitForResponse := MsgWaitForMultipleObjects(1, vWaitForEventHandles, FALSE, INFINITE, QS_ALLINPUT);
  if (vWaitForResponse = WAIT_OBJECT_0 + 1) then
  begin
    while (PeekMessage(msg,0,0,0,PM_REMOVE)) do
    begin
      TranslateMessage(msg);
      DispatchMessage(msg);
    end;
  end
  else
  if (vWaitForResponse = WAIT_FAILED)
    then RaiseLastOSError
    else break;
end;
end;
Run Code Online (Sandbox Code Playgroud)

所以我的问题是.这样的场景是否可以接受?或者我应该移动一个表单以显示在主线程中吗?

谢谢

delphi delphi-7

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

如何比较D7中的两个TRect变量?

如何比较TRect类型的两个变量?

var
  r1, r1: TRect;
begin
  if (r1 = r2) then
    ...
end; 
Run Code Online (Sandbox Code Playgroud)

由此我得到:不兼容的类型.

谢谢!

delphi delphi-7

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

TDelphiTwain组件,破坏delphi格式(dfm文件)

我已经下载了opensource delphi twain组件(TDelphiTwain).有趣的是,当放置并保存在表单上时,它会为自己创建糟糕的dfm条目.

  object DelphiTwain: TDelphiTwain
    OnSourceDisable = DelphiTwainSourceDisable
    OnSourceSetupFileXfer = DelphiTwainSourceSetupFileXfer
    TransferMode = ttmMemory
    SourceCount = 0
    Info.MajorVersion = 1
    Info.MinorVersion = 0
    Info.Language = tlDanish
    Info.CountryCode = 1
    Info.Groups = [tgControl, tgImage, tgAudio, MinorVersion]
    Info.VersionInfo = 'Application name'
    Info.Manufacturer = 'Application manufacturer'
    Info.ProductFamily = 'App product family'
    Info.ProductName = 'App product name'
    LibraryLoaded = False
    SourceManagerLoaded = False
    Left = 520
    Top = 136
  end
Run Code Online (Sandbox Code Playgroud)

问题在于:

   Info.Groups = [tgControl, tgImage, tgAudio, MinorVersion]
Run Code Online (Sandbox Code Playgroud)

只有三个可能的元素:

tgControl, tgImage and tgAudio
Run Code Online (Sandbox Code Playgroud)

每次我保存表单时它都会添加MinorVersion.当应用程序运行时,我收到Info.Groups存在无效属性的错误.当我手动调整坏部分而不离开dfm文件时,应用程序启动正常. …

delphi twain delphi-7

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

将SAFEARRAY从c ++返回到c#

我有一个c ++方法创建,填充并返回SAFEARRAY:

SAFEARRAY* TestClass::GetResult(long& size) 
{
    return GetSafeArrayList(size);
}

How should I export that function in a DLL so that c# could take it
How should I write c# method signature?
Run Code Online (Sandbox Code Playgroud)

我在c ++中有这样的东西:

extern "C" __declspec(dllexport) void GetResult(SAFEARRAY*& data, long& size)
{
    size = 0;
    data = handle->GetResult(size);
}
Run Code Online (Sandbox Code Playgroud)

这是对的,不是吗?

感谢帮助!

编辑:

c#来电:

public static extern void GetResult(IntPtr handle, [MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_USERDEFINED)] TestStruct[] data, ref int size);
Run Code Online (Sandbox Code Playgroud)

c# c++ marshalling

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

如何在t-sql中读取xml?

谁能告诉我如何从以下xml中选择值:我想得到如下行:Col1:key,Col2:key,Col3:value

1 1 value
1 2 value2
1 3 value3

2 4 value4
2 5 value5
2 6 value6
Run Code Online (Sandbox Code Playgroud)

这是xml:

<root>
  <item>
    <key>1</key>
    <value>
      <params>
        <item>
          <key>1</key>
          <value>value</value>      
        </item>
        <item>
          <key>2</key>
          <value>value2</value>     
        </item>     
        <item>
          <key>3</key>
          <value>value3</value>     
        </item>     
      </params>
    </value>
  </item>
  <item>
    <key>2</key>
    <value>
      <params>
        <item>
          <key>4</key>
          <value>value4</value>     
        </item>
        <item>
          <key>5</key>
          <value>value5</value>     
        </item>     
        <item>
          <key>6</key>
          <value>value6</value>     
        </item>     
      </params>
    </value>
  </item>  
</root>
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server-2008

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

delphi 7.如何检查单元文件是否存在并使用(指令?)添加它以与项目一起编译

我有一个单元,它是几个模块(DLL,应用程序)的一部分.

在其中一些我需要在该模块中使用他们的类.

是否可以使用编译器指令(或其他方法)将单元包含在文件中,以防它包含在项目中?

谢谢!

delphi

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

如何在D-7中绘制旋转的画布部分?

我正在A3打印机画布上画画.

是否可以复制画布的一部分并在画布的另一部分中绘制旋转(180度)?

谢谢!

delphi delphi-7

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

SetEnvironmentVariable 不起作用

我需要为包含的 3rd 方库设置两个环境变量(当我的应用程序运行时)。

问题是“那样”它不起作用,但是当我运行控制台应用程序时,设置这两个变量然后运行应用程序,一切正常......

如何正确配置这两个变量?

我使用的程序:

function SetEnvVarValue(const VarName,
  VarValue: string): Integer;
begin
  // Simply call API function
  if SetEnvironmentVariable(PChar(VarName),
    PChar(VarValue)) then
    Result := 0
  else
    Result := GetLastError;
end;
Run Code Online (Sandbox Code Playgroud)

它返回 0

也许问题是,我在应用程序启动时加载了库。当我的应用程序启动时,我设置了变量,但我这样做太晚了......?


更多信息

我在 dpr 中包含了两个单元:

'C:\Program Files (x86)\Borland\Delphi7\Lib\Magick\magick\ImageMagick.pas' 中的 ImageMagick,'C:\Program Files (x86)\Borland\Delphi7\Lib\Magick\wand\magick_wand 中的 magick_wand .pas';

和单位:

unit DoItFirst;

interface

uses
  Windows, Sysutils;

var
  s: string;
  error: Integer;

function _putenv_s(const lpName, lpValue: PChar): BOOL; cdecl; external 'msvcrt.dll';

implementation

function GetEnvVarValue(const VarName: string): string;
var
  BufSize: Integer;  // buffer size …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-7

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

最后尝试如何释放记忆

我是VS C++中的C++新手.我正在创建win32 dll库.尝试finally块我有一个重大的基本问题.

让我假装我有这样的事情:

class object {
  private:
    int* foo;
  public:
    object() : foo(new int()) { *foo = 42; }
    ~object() { 
      // Now since foo is dynamically allocated, the destructor
      // needs to deallocate it
      delete foo;
    }
};

int main() {
  vector<object*> tmp;
  tmp.push_back(new object());

  // Do some stuff with tmp

  for (int i = 0; i < tmp.size(); ++i) {
    delete tmp[i]; // Calls ~object (which deallocates tmp[i]->foo) 
                   // and deallocates *tmp[i]
  }
  tmp.clear();

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

c++

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