我正在寻找一个完全准确的算法陈述来计算单词中的音节.我研究时发现的不一致或我所知道的结果不正确.有没有人有任何建议如何实现这一目标?谢谢.
我现在使用的算法:
我还缺少更多规则吗?如果我使用的算法错误或我的实现,我正在尝试确定我的错误结果的测试.
正如上面的主题所示,我想知道是否有一个很好的例子来处理在按顺序处理数据时在函数parms中传递的指针.我所拥有的是:
function myfunc(inptr: pointer; inptrsize: longint): boolean;
var
inproc: pointer;
i: integer;
begin
inproc := inptr;
for i := 1 to inptrsize do
begin
// do stuff against byte data here.
inc(longint(inproc), 1);
end;
end;
Run Code Online (Sandbox Code Playgroud)
我的想法是,不管有多大的数据,我都希望它能够处理被推送的任何数据,而不是有限的数据.
现在谈到处理数据时,我已经想出了几种成功的方法.
有没有其他方法以这种方式有效地处理处理指针,或者是否有一些我缺少的方法,既干净又不浪费时间?
标题中有这样的东西吗?我试图在转换API结构的过程中做到这一点,并遇到以前没有遇到的事情:
PFNReaderTranslatedDispatch = function(var msg: TMsg): BOOL; stdcall;
PFNReaderScroll = function(var prmi: TReaderModeInfo; dx, dy: integer): BOOL; stdcall;
TReaderModeInfo = record
cbSize: DWord;
hWnd: THandle;
fFlags: DWord;
prc: PRect;
pfnScroll: PFNReaderScroll;
fFlags2: PFNReaderTranslatedDispatch;
lParam: DWord;
end;
PReaderModeInfo = ^TReaderModeInfo;
Run Code Online (Sandbox Code Playgroud)
知道Delphi的人会看到明显的问题.你会如何解决这个问题?
我正在使用TWindowsMediaPlayer并遇到问题。当前歌曲完成后,我无法加载新歌曲然后播放。
procedure TMainWinForm.WMPlayer1PlayStateChange(Sender: TObject;
NewState: Integer);
begin
if (NewState = wmppsMediaEnded) then
begin
WMPlayer1.URL := FileScanner.SelectSong;
writeln('Play triggered on ', String(WMPlayer1.URL));
WMPlayer1.controls.Play; // DOES NOT PLAY THE SONG!
end;
end;
Run Code Online (Sandbox Code Playgroud)
这会加载歌曲,但需要其他用户干预才能实际播放。我要让它继续下去的唯一方法是检查wmppsStopped,但是该事件发生了两次,所以我得到了列表中的所有奇数编号的歌曲。
关于如何使其正确运作的任何想法?
有一些我一直在努力的东西,我真的没有用Delphi程序解决,并想知道是否有人可以指导我.正如主题所说,你如何做正确的灾难性错误处理?例如:
// is file necessary for the program present?
if not FileExists(FilePath1) then
begin
raise Exception.Create(FilePath1 + ' does not exist and is required for this program to function.');
// I obviously need to do something here to make the program QUIT and not have
// any more code run.
Application.Terminate;
Abort;
end;
Run Code Online (Sandbox Code Playgroud)
我也可以在那里使用异常单元并抛出异常,但程序继续像以前一样.我过去曾经使用过停止呼叫,但它似乎没有进行任何清理等等,所以我最终制定了一个大程序,通过近距离和免费调用我所做的一切就是为了确保(即使那时我我不确定任何幕后的东西.
那么处理这类事情的正确方法是什么?
编辑:为了澄清,我想知道如何让程序做它需要做的清理,然后立即退出而不做任何其他代码.
我放弃使用FreeOnTerminate := true支持将其显式设置为false,但现在每次尝试显式释放线程时代码都会锁定.我确定在Free声明中发生了锁定.
对于线程进程的最后一步,我正在向我在主对象中创建的窗口句柄发送一条消息,表示"完成".在那里我正在运行一个事件,然后免费.为什么会这样?
当谈到获得MP3 ID3 v2实现时,我正在遇到一些问题.除了这一个问题之外,我大部分时间都在工作,这可能与此根本无关.无论如何,我正在使用以下代码来处理检索涉及文本的标头标签的数据.
我遇到的是(我猜?)我在一些不同的字符串中遇到Unicode字符.我试图在下面转换它,它的工作原理.但是我在字符串之前获得了3F的奖金,之后获得了$ 3F $ 3F.我可以对下面的代码做些什么来解析那些或者我必须自己做吗?文件由ITunes编码,如果这有助于任何.
function Id3v2_string(currp: pointer; datasize: integer): string;
{ handles string processing for ID3v2 data }
const
IS_TEXT_UNICODE_UNICODE_MASK = $0F;
var
outstr: string;
uscan: integer;
begin
outstr := '';
SetLength(outstr, datasize);
uscan := IS_TEXT_UNICODE_UNICODE_MASK;
if IsTextUnicode(currp, datasize, @uscan) then
outstr := WideCharToString(currp)
else
move(currp^, outstr[1], datasize);
Result := outstr;
end;
Run Code Online (Sandbox Code Playgroud)
注意,我真的对媒体库不感兴趣,因为我所要做的就是编辑ID3标签而不是播放文件 - 除了像这样的一些小问题之外,实现已经完成.
我有一个程序在Delphi 3中运行正常,我在Turbo Delphi 2006上编译和测试,发现了一个问题.问题是:我使用"基数"数据类型作为某种东西的索引.它在Delphi 3中有效,但我发现Turbo Delphi 2006编译版本的值大于128-256左右,具体取决于具体的数据.将这些数据类型更改为"longint"修复了问题,以便程序与两个编译器一起正常工作.
问题:这是为什么?
我的理解是Cardinal数据类型只是典型的无符号整数数据.这与它们在这个程序中的应用是一致的,特别是通过Delphi 3编译正常工作的事实证明了这一点.那么为什么Turbo Delphi 2006编译不起作用呢?
我正在尝试使用线程进程,但是多次执行似乎变得更加不稳定.有没有人对如何确定原因是什么有任何想法?但是,一个很大的区别是,我在多次执行时使用了一个阻塞循环,而不是让它以异步方式通过,就像我编写它一样.
这是我正在使用的等待循环代码(最明显的起点).我需要这样做,所以TMainObject可以处理FThreadProcess发送的消息中的任何事件.
procedure TMainObject.WaitForCompletion;
begin
repeat
Application.ProcessMessages;
until WaitForSingleObject(FThreadProcess.Handle, 20) = WAIT_OBJECT_0;
end;
Run Code Online (Sandbox Code Playgroud)
当我拿出每个项目并在不同的运行中异步处理它时,我没有任何问题.有没有人对要检查的事情有任何其他想法?谢谢.
由于我在任何地方都没有看到任何内容,并没有指出原有的Microsoft文档,或者源代码似乎没有回答我的问题,我想我可能会问一些这里的事情.(Delphi标签就在那里,因为这就是我的开发环境对我正在制作的代码的影响)
也就是说,我有一些问题,API文件没有回答.第一个:fdi_notify消息.什么是"我的责任"是编码这些:fdintCABINET_INFO: fdintPARTIAL_FILE: fdintNEXT_CABINET: fdintENUMERATE:?我将通过一个例子说明我的意思.因为fdintCLOSE_FILE_INFO,"我的责任"是关闭与给定的句柄相关的文件,并根据fdi_notify中传递的数据设置文件的日期和时间.
我想我错过了什么,因为我的代码没有处理提取跨越的CAB文件......有关如何做到这一点的任何想法?