在Delphi 7中,我使用CreateFileMapping打开一个文件,然后使用MapViewOfFile获取指针.
如何扩展内存并在内存中添加一些字符并将其保存到该文件中?
我已经用适当的模式(fmOpenReadWrite,PAGE_READWRITE)打开了文件,如果我覆盖了字符,它会被保存到文件中,但我需要在文件中间添加额外的值.
我一直在主线程中显示这些东西,并使用事件将窗口的末尾与线程同步,以便在窗口关闭时让它知道.
今天,在开发过程中,我想将显示的表单从线程移动到主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)
所以我的问题是.这样的场景是否可以接受?或者我应该移动一个表单以显示在主线程中吗?
谢谢
如何比较TRect类型的两个变量?
var
r1, r1: TRect;
begin
if (r1 = r2) then
...
end;
Run Code Online (Sandbox Code Playgroud)
由此我得到:不兼容的类型.
谢谢!
我已经下载了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文件时,应用程序启动正常. …
我有一个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) 谁能告诉我如何从以下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) 我有一个单元,它是几个模块(DLL,应用程序)的一部分.
在其中一些我需要在该模块中使用他们的类.
是否可以使用编译器指令(或其他方法)将单元包含在文件中,以防它包含在项目中?
谢谢!
我正在A3打印机画布上画画.
是否可以复制画布的一部分并在画布的另一部分中绘制旋转(180度)?
谢谢!
我需要为包含的 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) 我是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)