我需要将辅助应用程序的用户界面(UI)嵌入到主应用程序中.我可以使用SetParent轻松地将辅助应用程序主窗体托管到主应用程序中.我正在使用命名管道在两个应用程序之间进行通信.我甚至可以借助主应用程序中的虚拟TEdit在辅助应用程序中使用AttachThreadInput API来解决跳转问题.到现在为止还挺好.
我无法解决以下问题:辅助应用程序中的任何模态形式都不会被视为主应用程序的模态,这会造成重大麻烦.
顺便说一句:不要告诉我使用DLL,OCX或ActiveX.我有两个普通的exe文件.
任何帮助/暗示赞赏.
我尝试在计算着色器中实现自旋锁。但我的实现似乎没有锁定任何东西。
以下是我实现自旋锁的方法:
void LockAcquire()
{
uint Value = 1;
[allow_uav_condition]
while (Value) {
InterlockedCompareExchange(DataOutBuffer[0].Lock, 0, 1, Value);
};
}
void LockRelease()
{
uint Value;
InterlockedExchange(DataOutBuffer[0].Lock, 0, Value);
}
Run Code Online (Sandbox Code Playgroud)
背景:我需要一个自旋锁,因为我必须计算大型二维数组中的数据总和。总和是两倍。使用单线程和双循环计算总和会产生正确的结果。即使在计算总和时引入自旋锁以避免冲突,使用多线程计算总和也会产生错误的结果。
我无法使用 InterLockedAdd,因为总和不适合 32 位整数,而且我使用的是着色器模型 5(编译器 47)。
这是单线程版本,产生正确的结果:
[numthreads(1, 1, 1)]
void CSGrayAutoComputeSumSqr(
uint3 Gid : SV_GroupID,
uint3 DTid : SV_DispatchThreadID, // Coordinates in RawImage window
uint3 GTid : SV_GroupThreadID,
uint GI : SV_GroupIndex)
{
if ((DTid.x == 0) && (DTid.y == 0)) {
uint2 XY;
int Mean = (int)round(DataOutBuffer[0].GrayAutoResultMean);
for (XY.x …Run Code Online (Sandbox Code Playgroud) 我已经更新了我的XE5 Update1的几个应用程序.从那时起,ShowMessage经常触发访问冲突.这种情况发生在几个应用程 如果我用一个简单的表单替换ShowMessage,那么AV就不见了.所以这显然是ShowMessage的罪魁祸首.
AV出现在函数TaskDialogIndirect的WinApi.CommCtrl.pas中(参见下面的标记行):
function TaskDialogIndirect(const pTaskConfig: TTaskDialogConfig;
pnButton: PInteger; pnRadioButton: PInteger; pfVerificationFlagChecked: PBOOL): HRESULT;
begin
if Assigned(_TaskDialogIndirect) then
Result := _TaskDialogIndirect(pTaskConfig, pnButton, pnRadioButton,
pfVerificationFlagChecked) // <====== HERE ==========
else
begin
InitComCtl;
Result := E_NOTIMPL;
if ComCtl32DLL <> 0 then
begin
@_TaskDialogIndirect := GetProcAddress(ComCtl32DLL, 'TaskDialogIndirect');
if Assigned(_TaskDialogIndirect) then
Result := _TaskDialogIndirect(pTaskConfig, pnButton, pnRadioButton,
pfVerificationFlagChecked)
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
发生异常时的堆栈跟踪:
:671cab85 ; D:\Development\DelphiLibs\madCollection\madExcept\Dlls\madExcept32.dll
:671cabe2 ; D:\Development\DelphiLibs\madCollection\madExcept\Dlls\madExcept32.dll
:671ca755 madExcept32.ThisIsNoLeak + 0x29
:004aa9d7 ThisIsNoLeak + $F
:004a9412 HookedCreateThread + $82
:769613a2 msvcrt._beginthreadex + 0x74 …Run Code Online (Sandbox Code Playgroud) 我有以下缓冲区:
RWTexture2D<float4> Output : register(u0);
Run Code Online (Sandbox Code Playgroud)
计算着色器使用此缓冲区来渲染计算图像。要在该纹理中写入像素,我只需使用类似于以下的代码:
Output[XY] = SomeFunctionReturningFloat4(SomeArgument);
Run Code Online (Sandbox Code Playgroud)
这工作得很好,我的计算图像正确地呈现在屏幕上。
现在,在计算着色器的某个阶段,我想读回已经计算的像素并再次处理它。
Output[XY] = SomeOtherFunctionReturningFloat4(Output[XY]);
Run Code Online (Sandbox Code Playgroud)
编译器返回错误:
error X3676: typed UAV loads are only allowed for single-component 32-bit element types
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏。
使用 Delphi FireMonkey,我需要将 HTML 格式的字符串复制到 Delphi 中的剪贴板,以便粘贴它的其他应用程序会将其视为 HTML。
我已经尝试通过隐藏的备忘录组件复制简单文本,它可以工作,但被复制为简单文本。我需要 HTML 格式的副本。将其作为文本粘贴到任何富文本程序中时,它会显示所有 HTML 标记而不是格式化文本。
我当前将文本复制到剪贴板的方法是:
procedure TForm1.Button1Click(Sender: TObject);
var
SourceText: string;
begin
SourceText := 'This is a <b>bold</b> html line';
//I can use TMemo to copy it to clipboard like:
Memo1.lines.Text := SourceText;
Memo1.SelectAll;
memo1.CopyToClipboard;
end;
Run Code Online (Sandbox Code Playgroud)
但问题是,如果我将剪贴板上复制的文本粘贴到 Microsoft Word 中,它将被粘贴为:
“这是一个<b>bold</b>html 行”。我想要并且应该是这样的:
这是一个粗体的html 行
注意:我已经阅读了有关如何在 Windows 中完成此操作的其他讨论,但我需要一个用于跨平台应用程序的 Firemonkey 解决方案。任何帮助表示赞赏。
我尝试将元数据添加到现有 JPEG 文件并将图像保存在另一个文件中。我正在使用 Delphi 11 和 FreeImage(Delphi 包装器)。生成的图像与现有图像相同,没有添加元数据标签。完全没有错误。
这是重现该问题的简单独立过程:
procedure AddTagArtistTest;
var
fif : FREE_IMAGE_FORMAT;
dib : PFIBITMAP;
Tag : PFITAG;
TagValue : AnsiString;
TagKey : AnsiString;
TagID : WORD;
Filename : String;
Success : Boolean;
begin
Filename := 'F:\Images\ExistingImage.jpg'; // Already has metadata but no TAG_ARTIST
dib := nil;
Success := FALSE;
try
fif := FreeImage_GetFileTypeU(PChar(FileName), 0);
if fif = FIF_UNKNOWN then
fif := FreeImage_GetFIFFromFilenameU(PChar(FileName));
if fif = FIF_UNKNOWN then
Exit;
if not FreeImage_FIFSupportsReading(fif) then
Exit;
dib := FreeImage_LoadU(fif, …Run Code Online (Sandbox Code Playgroud) delphi ×4
directx ×2
hlsl ×2
clipboard ×1
copy-paste ×1
delphi-xe5 ×1
firemonkey ×1
freeimage ×1
spinlock ×1