bestlong 怕失憶筆記

當健忘由隨機逐漸趨向常態時,作筆記是非常必要的

Entries for the ‘程式設計’ Category

Delphi KTop 終於復站了

可以算是台灣 Delphi 領域的大事

Leave a Comment

當 PHP 想透過 RS232 下命令

在 Windows 環境下

// Use this code to write directly to the COM1 serial port
// First, you want to set the mode of the port. You need to set
// it only once; it will remain the same until you reboot.
// Note: the backticks on the following line will execute the
// DOS ‘mode’ command from within PHP
`mode com1: BAUD=9600 PARITY=N data=8 stop=1 xon=off`;
$fp = fopen (“COM1:”, “w+”);
if (!$fp) {
echo “Uh-oh. Port not opened.”;
} else {
$e = chr(27);
$string = $e . “A” . $e . “H300”;
$string .= $e . “V100” . $e . “XL1SATO”;
$string .= $e . “Q1” . $e . “Z”;
echo $string;
fputs ($fp, $string );
fclose ($fp);
}
?>

有機會測試看看。

Comments (2)

[PHP]讓下載的URL連結不會被直接開啟而是顯示儲存對話框

方法一:
$downloadfile=”somefile.txt”;
header(“Content-disposition: attachment; filename=$downloadfile”);
header(“Content-Type: application/force-download”);

方法二:

Leave a Comment

[Delphi] 主程式 與 DLL 之間的全域變數問題

當程式檔案大小感覺有些大時,開始考慮分割程式,在網路上蒐集相關資料。

在 DLL 中如何共用一個全域變數,例如使用者登入後的使用者帳號(UserName)

把要共享的全域變數放在主程式裡,如 UserName,UserID,…等等
在主程式中寫兩個函數

Function GetCurUserName():PChar;
begin
Result := PChar(UserName);
end;

Function SetCurUserName(AUserName:PChar);
begin
UserName := AUserName;
end;

然後在專案檔 (.dpr) 裡輸出這兩個函數寫


{$R *.res}

Exports
GetCurUserName, SetCurUserName;

這樣在每個 DLL 裡就可以使用這兩個函數了

function GetCurUserName: PChar;
var
fGetCurUserName: function: PChar;
begin
@fGetCurUserName := GetProcAddress(GetModuleHandle(PChar(Application.ExeName)), ‘GetCurUserName’);
if Assigned(fGetCurUserName) then
begin
Result := fGetCurUserName
else
Result := ‘Admin’;
end;

Leave a Comment

[Delphi] 遇上錯誤訊息 OLE error 80030002

使用 ADO 做資料庫連接,在 MainForm 上放置兩個 TADOConnection 各自連接 MS SQL 2000 與 MS Access 2000 兩個資料庫。

原本相安無事,但隨著程式碼的累積,忽然間,連接 Access 的 TADOConnection 居然一直造成錯誤。

出現的錯誤對話框顯示著 OLE error 80030002 訊息。

在網路上找到此篇
INFO: Translating Automation Errors for VB/VBA (Long)

其中有列出

-2147287038 (80030002) %1 could not be found.

因為要開啟的檔案不存在所以找不到,所以是參數的問題。

只好重新追蹤看看,花了將近ㄧ個下午的時間終於找到原因。居然是因為使用了 FileListBox1 元件的問題。就是因為下列幾行指令的影響

procedure TfmMain.FormCreate(Sender: TObject);
(省略)
gs_AppPath := AddSlash(ExtractFilePath(Application.ExeName));
gs_DownLoadPath := AddSlash(gs_AppPath + ‘download’);
FileListBox1.Directory := gs_DownLoadPath; // 因為加了此行造成錯誤
(省略)
end;

執行 FileListBox1.Directory := gs_DownLoadPath; 後會導致程式執行時的工作目錄也改變成 gs_DownLoadPath 的內容。所以之後的程式碼若是有使用相對路徑的方式就有可能會導致路徑錯誤。

也剛好讀取 Access 的 TADOConnection 的 ConnectionString 屬性就是使用相對路徑的方式,來連接應用程式相同目錄下的 DB.UDL 資料連接設定檔。因為是在工作目錄的變動後才連線所以造成錯誤。

Leave a Comment

  • 工商服務

    廣告讀取中...
  • 近期留言

  • 標籤

  • 彙整