喫茶XRAYトップページ

[スレッド全体
]

[11931] DLL内の関数とフォームの関数の実行返信 削除
2018/6/14 (木) 07:41:42 Mr.XRAY
[DLL にて except 使用]
http://madia.world.coocan.jp/cgi-bin/DelphiBBS/wwwlng.cgi?print+201806/18060002.txt

abc 2018/06/14(木) 05:58:32

のコードを解読すると以下のようなことのようです.
何とも言えない,面白いのか,変なのか,摩訶不思議なと言うか... (^^:

DLL を使用する側のプロジェクトのコード

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

procedure FormProcA(AText: PChar);stdcall;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure DLL_funcA(AProc: TFarProc); stdcall; external 'Test_DLL.dll';

//-----------------------------------------------------------------------------
//  DLL内の関数を実行
//  引数はこのユニット内で定義している関数
//  つまり,DLLからこのフォームの関数を実行している
//-----------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
  DLL_funcA(@FormProcA);
end;

//-----------------------------------------------------------------------------
//  この関数をDLLから実行する
//-----------------------------------------------------------------------------
procedure FormProcA(AText: PChar);
begin
  Form1.Memo1.Lines.Add(AText);
end;

end.


DLL のコード

library Test_DLL;

uses
  Windows;

type
  TMyFuncType =  procedure (AText: PChar);stdcall;

var
  FormProcA : TMyFuncType;

//-----------------------------------------------------------------------------
procedure DLL_funcA(AProc: TFarProc); stdcall;
begin
  @FormProcA := AProc;
  FormProcA('*** ABC ***');
end;

//-----------------------------------------------------------------------------
exports
  DLL_funcA;

end.


実行結果です.
実行環境は Windows 7 U64(SP1) + Delphi XE5(UP2) Pro です.
質問された方が書いている LogWriteProc2 は無理です.
何故なら関数内関数になっています.
もちろん,expect は全く関係ありませんです.
もちろん,バグでもありません.

これが朝起きて最初の作業.おそまつ ! (笑)



[11938] 某掲示板の文字化け返信 削除
2018/6/17 (日) 17:00:19 Mr.XRAY
> [DLL にて except 使用]
> http://madia.world.coocan.jp/cgi-bin/DelphiBBS/wwwlng.cgi?print+201806/18060002.txt


掲示板への投稿記事の文字化けのことを書きましたか,
実際には,文字化けが投稿者側で回避できるのかは分かりません.

そのことを調べるには文字化けの投稿をされている方の協力が必要です.
しかし,おそらく,文字化けの投稿をする方の協力が得られることは無理でしょう.


[11940] Re:某掲示板の文字化け返信 削除
2018/6/17 (日) 20:47:49 taka
▼ Mr.XRAYさん
> 掲示板への投稿記事の文字化けのことを書きましたか,
> 実際には,文字化けが投稿者側で回避できるのかは分かりません.
>
> そのことを調べるには文字化けの投稿をされている方の協力が必要です.
> しかし,おそらく,文字化けの投稿をする方の協力が得られることは無理でしょう.


某掲示板の場合は、
基本的に掲示板の設置者の技術的な問題ですね

該当サイトをみてみましたが
httpのレスポンスヘッダの文字コード宣言と
コンテンツ内のhtmlの文字コード宣言は一致していますので
ブラウザが誤認識することはまずないと思います。

よくみてもらえばわかりますが、文字化けが始まっているのは、
投稿者が編集できない、年月日の横の曜日から後の文字が化けています。

推測ですが
・サーバー側に文字コードを自動認識するようなコードが含まれているとか
・htmlエスケープする処理に問題があるとか
たまたま誤動作する地雷ワードを踏んでしまって
誤作動しているだけだと思います

要するにですね。
あれですよ
Delphi win32でいうと 規格外の文字は自動で ? になりますね
そういう文字を ? にしないで そのままにして
htmlエスケープしているような超初歩的な間違いのような気がします
なんとなくですけど



[11941] Re2:某掲示板の文字化け返信 削除
2018/6/17 (日) 20:52:30 taka
> ▼ Mr.XRAYさん
> > 掲示板への投稿記事の文字化けのことを書きましたか,
> > 実際には,文字化けが投稿者側で回避できるのかは分かりません.

メモ帳で一度ANSIを指定して保存して、閉じて開いてコピペして
投稿すれば文字化けしないような気もします。


[11942] Re3:某掲示板の文字化け返信 削除
2018/6/17 (日) 22:25:50 Mr.XRAY
▼ takaさん

> メモ帳で一度ANSIを指定して保存して、閉じて開いてコピペして
> 投稿すれば文字化けしないような気もします。


この「保存」がポイントのような気がしますね.
う〜む.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82