トップページ⇒tech
1001コメント285KB

C# vs Delphi Round 1

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
ヘジとその信者を同時に奪われたDelphiは
やっぱり死滅しちゃいますか?
0153デフォルトの名無しさんNGNG
始めよう!C#
http://software.nikkeibp.co.jp/software/backno/02csmook1.html
0154デフォルトの名無しさんNGNG
>>152
Del厨が嫌がって対決になりません。
0155デフォルトの名無しさんNGNG
>>154
先手打てば?さっさと。
そうすれば堂々とお前たちの勝利を宣言できる。
0156デフォルトの名無しさんNGNG
じゃあ、お題その1。

このスレをダウソしてローカルファイルに保存せよ。
0157デフォルトの名無しさんNGNG
>>156
.NETなら10行切るな・・・。
0158デフォルトの名無しさんNGNG
using System.Net;
class a
{
static void main()
{
WebClient b = new WebClient();
b.DownloadFile("http://めんどいから省略〜","c:\a.html");
}
}
0159Delフサギコ ◆zE1iiRdQ NGNG

 ∧,,∧     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ミ ゚Д゚ミ ∫< ゾヌ作者DaxタンのTips
.(ミ  ミっ-~  \__________
〜ミ,,⊃ミ⊃ ああ、ありがたや!

http://members.jcom.home.ne.jp/monazilla/document/indytips.html
0160デフォルトの名無しさんNGNG
お題その2

メールを送信するプログラムを作成せよ。
0161デフォルトの名無しさんNGNG
unit MyHttp;

interface

uses Winsock,classes,Windows,SysUtils;

type
TMyHTTP = class
private
wsa :TWSAData;
function MyConnect(URL :string) :Integer;
public
Port :Integer;
Options :TStringList;
constructor Create;
destructor Destroy;override;
function Get(URL :string) :string;
end;

implementation

//接続
//引数:ホスト名
//返値:ソケット
function TMyHTTP.MyConnect(URL :string) :Integer;
var
sock :TSocket;
addr :TSockAddrIn;
hostent :PHostEnt;
begin
0162デフォルトの名無しさんNGNG
sock := socket(AF_INET,SOCK_STREAM,0);
addr.sin_family := AF_INET;
addr.sin_port := htons(Port);
hostent := gethostbyname(PChar(URL));

addr.sin_addr.S_addr := PInteger(HostEnt.h_addr^)^;

connect(sock,addr,sizeof(addr));

Result := sock;
end;


constructor TMyHTTP.Create;
begin
Port := 80;
Options := TStringList.Create;

WSAStartup(MAKEWORD(1, 1),wsa);
end;


destructor TMyHTTP.Destroy;
begin
WSACleanup;
Options.Free;
inherited;
end;

0163デフォルトの名無しさんNGNG
//GETメソッド
//引数:URL
//返値:リプライメッセージ
function TMyHTTP.Get(URL :string) :string;
var
sock :TSocket;
host :string;
fil :string;
data :array[0..2048] of char;
data2 :array[0..2048] of char;
recvbyte :Integer;
begin
host := Copy(URL,0,Pos('/',URL) - 1);
fil := Copy(URL,Pos('/',URL),length(URL));

StrCopy(data,PChar('GET ' + fil + ' HTTP/1.0'#13#10 + Options.Text + #13#10#13#10));

sock := MyConnect(host);

send(sock,data,2048,0);

while(true) do
begin
recvbyte := recv(sock,data2,2048,0);

if(recvbyte = 0) then
break;

data2[recvbyte] := #0;
0164デフォルトの名無しさんNGNG
Result := Result + data2;
end;

closesocket(sock);
end;

end.

晒してみる。
0165デフォルトの名無しさんNGNG
>>160

using System.Web.Mail;

class AAA {
 public static void Main() {
  MailMessage msg = new MailMessage();
  msg.To = "〜";
  msg.Subject = "テスト";
  msg.Body = "テスト送信します。";
  SmtpMail.Send(msg);
 }
}
0166デフォルトの名無しさんNGNG
C#はどれも10行程度か。
0167デフォルトの名無しさんNGNG
>>166
後発かつインターネットでの連携を考慮したライブラリだからね。
0168デフォルトの名無しさんNGNG
Delphi駄目じゃん。
begin〜end読みにくい
静的変数(static)使えない
varの所でしか宣言できない
厨っぽい
0169Delフサギコ ◆zE1iiRdQ NGNG
  ,,,,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,,,,ミ,,゚Д゚彡 < けっこう、強力やなー
  UU"""" U U[大阪弁]__________
メール送信って、Indyではどや?
NMPOPだとニポン語エンコド問題が
非常にネクになってたので、やりずらかったはず。
0170Del厨房no71NGNG
Delでもこういうライブラリ作れば

function GetHttp(url:string):string;
var hSession:HINTERNET;
hService:HINTERNET;
var rsiz:DWORD;
buf:string;
begin
Result:='';
setlength(buf,$10000);
hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil,nil, 0 );
if assigned( hSession) then try
hService := InternetOpenUrl( hSession, PChar(url), nil, 0, 0, 0 );
if assigned( hService ) then try
repeat
InternetReadFile( hService , PChar(buf) , length(buf)-10 , rsiz );
Result:=Result+copy(buf,1,rsiz);
until rsiz=0;
finally InternetCloseHandle(hService) ; end;
finally InternetCloseHandle(hSession) ;end;
end;

//////// ほら1行書くだけ ///////
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Lines.Text:= GetHttp('http://pc.2ch.net/test/read.cgi/tech/1021550705/');
end;
0171デフォルトの名無しさんNGNG
まぁ、ライブラリ使えば大体の言語は1行で終わるわなw
かといってAPIで負しても仕方ないしな。

>>168
正直にわからないと言いなさいw
0172デフォルトの名無しさんNGNG
〜だったら、〜であれば
はナシってことで
0173デフォルトの名無しさんNGNG
実際に行数・読みやすさでもC#の圧勝じゃん。
Del厨も何か有利なお題出してみたら?
0174デフォルトの名無しさんNGNG
>>173
ソース出さなかった奴に限ってよく吠えるw
0175Del厨房no71NGNG
メール送信は、簡単に書こうとすると ShellExecute かMAPIのコンポ貼り付けになってしまうので完敗を認めます

ShellExecute の場合でも エンコードコードが必要なので1レスで書くのは厳しいです
0176デフォルトの名無しさんNGNG
>168
それならBCBの圧勝ですか?
0177デフォルトの名無しさんNGNG
>>175
CDO使えばいいじゃん。
0178Delフサギコ ◆zE1iiRdQ NGNG
>メール送信は、簡単に書こうとすると ShellExecute かMAPIのコンポ貼り付けになってしまうので完敗を認めます

   ∧,,∧∩  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ*゚Д゚*ミ < どやってか、コソーリ教えれ
  (ミ   ミ   \____________
 〜ミ ,,, ミ
   し' `J
ShellExecuteでメーラー起動ならわかるんだが…(藁
0179Del厨房no71NGNG
>>178 ShellExecuteもMAPIもメーラにお願いする方式です。 SMTP直ではありません
0180Delフサギコ ◆zE1iiRdQ NGNG
    ∧ ∧  ・・・・。
    ミ ゚Д゚彡
  〜ミ,,,,uuミ

    ∧ ∧ ショボーン 
    ミ,,。_。彡  
  〜ミ,,,,uuミ

メーラー起動なら…
procedure TForm1.Button2Click(Sender: TObject);
var
MailAddress, Subject, Body, CommandLine: String;
begin
 MailAddress := '[email protected]';
 Subject := 'メールのタイトル';
 Body := StringReplace( Memo1.Text, #13#10, '%0D%0A', [rfReplaceAll]) ;
{ #13#10は'%0D%0A'のようにエスケープしる。 }
CommandLine :=
  Format('mailto:%s?subject=%s&body=%s', [MailAddress, Subject, Body]);

ShellExecute(Handle, nil, PChar(CommandLine), nil, nil, SW_SHOWNORMAL);
end;
0181Del厨房no71NGNG
>>180
 エンコードはもっとしっかりやらないと化ける元かも
 速度考えないで書いたのは

function EncodeStr(const s:string):string;
var i:integer;
begin
Result:='';
i:=1;
 while i<=length(s) do
  begin
  case s[i]of
  #0..#31,'"','''',',','&','%':
      Result:=Result+'%'+IntToHex(ord(s[i]),2);
  else begin
    Result:=Result+s[i];
    end;
  end;
   inc(i);
  end;
end;
0182デフォルトの名無しさんNGNG
Del厨が恥知らずなコードを晒すスレはここですか?
0183デフォルトの名無しさんNGNG
>>182
コード晒さない奴がコード晒す奴をバカにする権利はない。
0184Del厨房no71NGNG
もちろん SMTPを使う方法もあります。 TNMSMTPとか
http://www.nifty.ne.jp/forum/fdelphi/samples/01302.html
0185デフォルトの名無しさんNGNG
じゃあ、かなりの難題。

プログラムからHello Worldプログラム(コンソールアプリ)のソースを出力し、
コンパイルし、できたexeを実行せよ。
0186デフォルトの名無しさんNGNG
>>185
書いても良いんだけどそれは難題か?
もしかしてDelphiコマンドラインコンパイラ無いとか思ってる?
0187デフォルトの名無しさんNGNG
>>185
お前の日本語が難解だよ。
0188Delフサギコ ◆zE1iiRdQ NGNG
  ∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚ミ < テキストファイル出力して
  ミ   ミ   \ShellExecuteでdcc.exeに渡して
〜ミ,UU_ミ    その結果をShellExecuteするんすか?
こりゃまた....
0189デフォルトの名無しさんNGNG
>>185
却下。.NETに有利すぎる。(w
0190デフォルトの名無しさんNGNG
なんかさっきから.NETに有利なお題しか出てないぞ。
0191デフォルトの名無しさんNGNG
>>190
Delphiが試されてるんだからそれでいいんじゃないの?
0192デフォルトの名無しさんNGNG
それが狙いよ!!フェッフェッ。
0193デフォルトの名無しさんNGNG
つぅか圧倒的なライブラリ差で.NETが勝つのは当然だけどね。

わざわざCとMFC戦わせてるようなもん。
0194デフォルトの名無しさんNGNG
>>188
Delphiだとそういう原始的な手段しかない。
.NETの方はソース生成もコンパイルも実行も、ライブラリの範囲内でエレガントにできてしまう。
0195デフォルトの名無しさんNGNG
uses Windows; {$APPTYPE CONSOLE}
procedure Exec(const Cmd: PChar);
var SInfo: STARTUPINFO; PInfo: PROCESS_INFORMATION;
begin
 GetStartupInfo(SInfo);
 CreateProcess(nil, Cmd, nil, nil, False, 0, nil, nil, SInfo, PInfo);
 WaitForSingleObject(PInfo.hProcess, INFINITE);
end;
var F: Text;
begin
 Assign(F, 'b.pas'); Rewrite(F);
 Write(F, 'begin Write(''Hello World'') end.');
 Close(F);
 Exec('dcc32 -cc b.pas'); Exec('b.exe');
end.
0196デフォルトの名無しさんNGNG
>>194
>原始的な手段
逆に永遠に生き続けると言うことだよ。w
0197デフォルトの名無しさんNGNG
つーかCodeDomでしょ?
0198デフォルトの名無しさんNGNG
>193
VCLはへっぽこライブラリという事ですね。
0199デフォルトの名無しさんNGNG
煽るのが目的だからコードなんか見ちゃいないという。
0200デフォルトの名無しさんNGNG
>>194
でもそれやると行数食うよ
0201デフォルトの名無しさんNGNG
まあ、あれだな。コイズムと同じ幻想だな。
0202デフォルトの名無しさんNGNG

☆ チン     マチクタビレタ〜
                         マチクタビレタ〜
        ☆ チン  〃  Λ_Λ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ヽ ___\(\・∀・) <  次のお題まだー?
             \_/⊂ ⊂_ )   \_____________
           / ̄ ̄ ̄ ̄ ̄ ̄ /|
        | ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
0203デフォルトの名無しさんNGNG
vs Javaか?
0204デフォルトの名無しさんNGNG
>>202
円周率を100桁求めて下さい。
0205Delフサギコ ◆zE1iiRdQ NGNG
    ∧ ∧  ・・・・。
    ミ ゚Д゚彡
  〜ミ,,,,uuミ

マジでそんなに簡単にできんの?
自分でエディタ作ったとして、
秀マクロみたいなのが、簡単に作れるってわけざんすか

C#移行か…
さっさと、Delphi.NETしてホスイですね。
0206デフォルトの名無しさんNGNG
次のお題の前に>>29と >>185の C# のコードは?
0207デフォルトの名無しさんNGNG
>>206
CodeDOMなんか実装してたら日が暮れます。
0208デフォルトの名無しさんNGNG
>>204 それ前にDelphiで作った どこかにコード落とした筈
0209デフォルトの名無しさんNGNG
CSVがでてたので、次は
XMLファイルを構造体/クラス/レコードに読み込むプログラム。

<Person>
 <Name>フサギコ</Name>
 <Age>6</Age>
 <Job>
  <Title>遊び人</Title>
 </Job>
</Person>

構造体はC風に書くと

struct Person {
 char* name;
 int age;
 struct Job* job;
};
struct Job {
 char* title;
}:

こんな感じで。やりやすい格好であればいいです。
0210195NGNG
C#でエレガントにできるというならそれを見せて頂けませんか?
ひょっとして.NETだとコンパイラ作るのが楽?興味ありありです。
0211デフォルトの名無しさんNGNG
CodeDOM関係はまだ全部は実装されていない筈
0212デフォルトの名無しさんNGNG
>>211
確かECMAには初めから盛り込まれてなかったね。

>>194ははったりなんですか?
0213デフォルトの名無しさんNGNG
だから耳学問で実装なんかした事無いんだから。無茶言わないでよ!
0214デフォルトの名無しさんNGNG
簡単だエレガントだと言って、それを使いこなせてないんじゃしょうがないね >C#
0215デフォルトの名無しさんNGNG
.NET派の皆さん。あなたのUSER_AGENT名を教えて下さい。

http://taruo.net/e/

とか参照して。
0216Del厨房no71NGNG
>>215
 ん? ,NET 嫌いだけど 評価の為に買ってるよ

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705)
0217デフォルトの名無しさんNGNG
みんなここからお題探してるだろ。(w
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1003826049

>>209なんか.NETで何の変換作業もいらないじゃん。
0218デフォルトの名無しさんNGNG
>>217
分っててやってるんですが(笑い
Delphiでは、まあDOMパーザはどっかから持ってくるとして、
そこからシコシコ取り出すしかないですよね?
0219Del厨房no71NGNG
ちゃんとパーサーを使えといわれたら大変だけど

XML はDTDで必ずフィールドがあるように出来るから、
delphiでも pos関数で探して取り出す方法で取り出しても問題ないよ
そしてたぶんその方法が早くて簡単・・・でも面白くない
0220デフォルトの名無しさんNGNG
>>209
XMLの先頭行に
<?xml version="1.0" encoding="Shift_JIS"?>
が必要。

using System.Xml;
using System.Xml.Serialization;

public class AAA {
  public static void Main() {
    XmlSerializer s = new XmlSerializer(typeof(Person));
    XmlTextReader r = new XmlTextReader("data.xml");
    Person p = (Person)s.Deserialize(r);
    r.Close();
  }
}

public class Person {
  public string Name;
  public int Age;
  public Job Job;
}

public class Job {
  public string Title;
}
0221195NGNG
僕はProfessional版ユーザーなんですけど、Delphi6のEnterprise版って
XMLファイルからやりとり用インターフェース生成する機能ありませんでした?ダイレクトメールに書いてあった記憶が…
0222デフォルトの名無しさんNGNG
つかDelphiってリフレクション相当の機能ってあるの?
0223デフォルトの名無しさんNGNG
コンパイル速度はどうなの?
0224Del厨房no71NGNG
>>220 もしかして
Delphi用語で実行時型情報でプロパティ名を探して一致するプロパティがあれば自動的に格納される
というような感じですか?

面白そうですね。そういう関数作ってみようかな
0225デフォルトの名無しさんNGNG
使ってみればわかる。
0226195NGNG
>>222
クラス参照とpublishedフィールドがあります。
0227デフォルトの名無しさんNGNG
>>226
だとするならXmlSerializerみたいなのも作れるのかな。やったね!
0228デフォルトの名無しさんNGNG
盛り上がってまいりました!
0229195NGNG
Delphi6のヘルプの新機能紹介でEnterprise版のXML機能について書かれている部分です。
これが本当なら何の苦もなくXML処理できそうなのですけど、実際のとこ教えてくれませんか?→Enterprise版持っている人
---------------------
XML データバインディングウィザード

この新しいウィザードは,XML データファイルのアクセスと更新を行うための非常に簡単な方法を提供する Delphi コードを生成します。
生成されるコードは,自然で直感的なプロパティベースのプログラミングモデルなので,Delphi コンポーネントのプログラミングと同じような感覚で XML データを操作できます。
XML データバインディングは,XML ドキュメントオブジェクトモデル(DOM)インターフェースを使う場合に必要な複雑なコーディングに代わるもので,検証された XML ドキュメントを操作するアプリケーションに最適です。

XML ドキュメントのプログラミング

XML データバインディングは,新しい TXMLDocument コンポーネントとその関連インターフェース IXMLDocument/IXMLNode に基づいています。
このコンポーネントは,XML データ処理用の DOM インターフェースの簡略版を提供します。TXMLDocument をフォームに配置し,その FileName プロパティを設定し,Active を true を設定するだけで,すべての XML データに簡単にアクセスできるようになります。

クロスプラットフォーム/ベンダーに依存しない DOM プログラミング

XML ドキュメントプログラミングサポートの最下位レベルにあるのが,新しい xmldom.pas インターフェースユニットです。
このインターフェースユニットは,クロスプラットフォームでベンダーに依存しない,W3C DOM Level 2 仕様に準拠したプログラミングを可能にするインターフェースのセットを提供します。
オープンアーキテクチャで設計されたこれらのインターフェースは,既存の DOM ベースの XML ソリューションに簡単に組み込むことができます。

データベースアプリケーションでの XML の使用

一連の新しいコンポーネントにより,XML ドキュメントを製品のデータベースアーキテクチャに組み込むことが可能になります。
コンポーネントは,任意の XML ドキュメントとクライアントデータセットのデータパケットとの間のマッピングを定義するための設計時ツールである
XML マッパーによって生成されたトランスフォーメーションファイルを使用します。
0230デフォルトの名無しさんNGNG
じゃ >>224があるとして

uses 224;
type
TJob = class
published
property Title:string;
end;
TPerson=class
published
property   Name:string;
property  Age:Integer;
property  Job:TJob;
end;
TPersonClass = class of TPerson;
var dlist:TList;
i:Integer;
begin
with TStringList.Create do try
LoadFromFile('file.XML');
dlist:= XmlSerialize(text,TPersonClass) ; //結果はTList型で帰る
  for i:=0 to dlist.Count-1 do begin
   //ここで必要な処理
  end;
 finally free;end;
end;

0231デフォルトの名無しさんNGNG
だからコンパイル速度はどうなの?
0232デフォルトの名無しさんNGNG
つーかデリミタが記号のC#と英文字のPASCAL。
遠くから見ても分割が一目でわかるのは絶対にC#だと思う。
それが幼稚だという人もいるかも知れんが、幼稚でも仕事が速いほうが良い。
0233デフォルトの名無しさんNGNG
幼稚というか…
0234デフォルトの名無しさんNGNG
構文強調表示されてるから別に見ずらいと思った事内野。
0235デフォルトの名無しさんNGNG
>>229
そんなアヤシイものより、MSXMLのほうがいいだろ。
最新版ダウソできるし、定期的にバグ修正版出してるし。
簡易HTTPまでついてるから、クライアントサイドはこれだけでOK。
0236デフォルトの名無しさんNGNG
>>234
2chでは再現できない部分だね
Delが最初から予約語を太字で表現できたのに対し
VSは.NETになってからじゃなかったっけ
0237デフォルトの名無しさんNGNG
>>185
こういうのを想定してたのかな?

using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.IO;
using System.Reflection;
using System.Text;

class Test
{
  public static void Main() {
    // CodeDomを取得
    CodeCompileUnit unit = GenerateCompileUnit();

    // 言語を決定
    CodeDomProvider provider = new Microsoft.CSharp.CSharpCodeProvider();
//   CodeDomProvider provider = new Microsoft.VisualBasic.VBCodeProvider();
//   CodeDomProvider provider = new Microsoft.JScript.JScriptCodeProvider();

    // ソースを出力
    using ( StreamWriter w = new StreamWriter("Hello.cs", false, Encoding.GetEncoding("Shift_JIS")) ) {
      ICodeGenerator gen = provider.CreateGenerator();
      gen.GenerateCodeFromCompileUnit(unit, w, null);
    }

    // コンパイル
    CompilerParameters param = new CompilerParameters();
    param.GenerateExecutable = true;
    param.OutputAssembly = "Hello.exe";

    ICodeCompiler compiler = provider.CreateCompiler();
    compiler.CompileAssemblyFromDom(param, unit);

    // 実行
    AppDomain.CurrentDomain.ExecuteAssembly("Hello.exe");
  }
0238デフォルトの名無しさんNGNG

  // Hello WorldプログラムのCodeDomを生成する。
  public static CodeCompileUnit GenerateCompileUnit() {
    CodeCompileUnit unit = new CodeCompileUnit();

    CodeNamespace ns = new CodeNamespace();
    unit.Namespaces.Add(ns);

    CodeTypeDeclaration hello = new CodeTypeDeclaration("Hello");
    hello.TypeAttributes = TypeAttributes.NotPublic;
    ns.Types.Add(hello);

    CodeEntryPointMethod main = new CodeEntryPointMethod();
    hello.Members.Add(main);

    CodeMethodInvokeExpression write_line = new CodeMethodInvokeExpression();
    write_line.Method = new CodeMethodReferenceExpression( new CodeTypeReferenceExpression(typeof(Console)), "WriteLine" );
    write_line.Parameters.Add( new CodePrimitiveExpression("Hello World!!") );
    main.Statements.Add(write_line);

    return unit;
  }
}
0239デフォルトの名無しさんNGNG
#さん降臨か?
0240デフォルトの名無しさんNGNG
>>238
Delphi以上に文字打つのが面倒そう。

コンパイルに何秒ぐらいかかりましたか?
0241デフォルトの名無しさんNGNG
>>240
1秒もかからないよ
0242デフォルトの名無しさんNGNG
>>240
>Delphi以上に文字打つのが面倒そう。
確かに。Javaと同程度かな。
0243Delフサギコ ◆zE1iiRdQ NGNG

   ∧,,∧    /なにげに、>>195さんのコードの動作確認。
  ミ;゚Д゚彡 < ………神っ!!!
   ミつ つ゛  \
 @ミ  ミ      なにゆえこんな芸当が...!!
   ∪''∪     このスレで神の領域を見るとは...アリガタヤアリガタヤ

           このコード...どんなDelphiソースでもコンパイル化なの?
0244デフォルトの名無しさんNGNG
>>185 原始バージョン

using System;
using System.IO;
using System.Text;
using Microsoft.CSharp;

class Test
{
  public static void Main() {
    // ソース定義
    StringWriter s = new StringWriter();
    s.WriteLine("using System;");
    s.WriteLine("");
    s.WriteLine("class Hello {");
    s.WriteLine(" public static void Main() {");
    s.WriteLine(" Console.WriteLine(\"Hello World\");");
    s.WriteLine(" }");
    s.WriteLine("}");
    s.Close();

    // ソース生成
    using ( StreamWriter w = new StreamWriter("Hello.cs", false, Encoding.Default) ) {
      w.Write( s.ToString() );
    }

    // コンパイル
    Compiler.Compile(
      new string[] { s.ToString() },
      new string[] { "Hello.cs" },
      "Hello.exe",
      null,
      null
    );

    // 実行
    AppDomain.CurrentDomain.ExecuteAssembly("Hello.exe");
  }
}
0245Delフサギコ ◆zE1iiRdQ NGNG
      ∧,,∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
     ミ   彡  < どっちの厨も
     (ミ   ミ)    \_______
      ミ   ミ 
      ∪ ∪


      ∧,,∧ サッ  / ̄ ̄ ̄ ̄ ̄ ̄ ̄
     ミ,,゚Д゚ミ  < だまっちゃいました。
    ⊂   Om   \_______
     ミ、,, ミ,
      .しヾJ




       ∧,,∧  ま゙
      ミ゚Д゚,,彡  仲良くやんなさい。
     ⊂   ミ)
       ミ   ミ
       ∪''∪  言語の進化が促されて
            面白くなってきたよね。
          .NETフレームワークにもDelphi.NETにも期待してよし。


          で。次のお題はぁ??
0246195NGNG
コンパイルが終わるのを待つためにCreateProcess & WaitForSingleObject を使っただけで
>>188でフサギコさんが言ったのと同じことやってるんですけど… マアワルイキハシマセンガ
0247デフォルトの名無しさんNGNG
PASCAL.NETは出るのでしょうか?
0248Delフサギコ ◆zE1iiRdQ NGNG
             _______________
  ,,,,,,,,,,,,,∧,,∧   /ほんとにやっちまうとは主輪なんだ。
〜′,,,,,,,ミ,,゚Д゚彡<  んで、あんなに簡単にやるとも主輪なんだ。
  UU""" U U   \_>>195さんカコイイ・・
              C#ソースも、コンパイラをオブジェクトで扱えるのも
              かなり素敵ネ。CodeDomよりソース綺麗じゃ。

そしたら..
b.exeと元プロジェクトのexeとの通信が出来たら...
WM_COPYDATAとか、DDEあたりで、、。。
否、、リダイレクソンとかで可能なのかな?
.
とりあえず、それが出来たら
アプリケーションユーザーに
Delphiソースでマクロ書いてもらったら
ExeやDLLにして元アプリの動作を変更できたりするのかな?

…って。アプリユーザーにもDelphiコンパイラが
必要なのか...まあ。仕方ない無料だしダウソしてもらうのがスジか。
0249195NGNG
色々つぶやいてから寝ます…

237-238すごいなー。
とりあえず244がコンパイルできないんですけど("Compiler"が見つからない)どうすればいいのかな…

Pascal系言語.NETは既に2種類ぐらい出てますよ。Delphi.NETが出たらもうひとつ増えることになりますね。
OberonよりObjectPascalが好きなのでDelphi.NET期待です。

マクロ目的ならそんな面倒なことしなくてもBPL作ってもらえばDelphi IDEみたいにできるのでは…

229にDelphi使いが返事くれないということは、ここにEnterprise使ってる人はいないってことですか…
自分もそうだから何も言いませんけど。

…それにしても静かだ。皆さん寝てしまったのかな。けっこう良スレになっちゃいましたね、ここ。
0250Delフサギコ ◆zE1iiRdQ NGNG
         _________
  ∧,,∧   / Indyのメーラーサンプルは
 ミ,,゚Д゚彡<  こんなソースでした。
 ミつ[お手紙])  いまさらながら。
〜ミ  ミ.     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  U U  これを使えばデラ簡単にメール送信可でした

D6ProIndyメーラーサンプルのコピペ
procedure TfrmMessageEditor.bbtnOkClick(Sender: TObject);
begin
 with IdMsgSend do
 begin
  Body.Assign(Memo1.Lines);
  From.Text := UserEmail;
  Recipients.EMailAddresses := edtTo.Text; { To: header }
  Subject := edtSubject.Text; { Subject: header }
  Priority := TIdMessagePriority(cboPriority.ItemIndex); { Message Priority }
  CCList.EMailAddresses := edtCC.Text; {CC}
  BccList.EMailAddresses := edtBCC.Text; {BBC}
  if chkReturnReciept.Checked then
  begin {We set the recipient to the From E-Mail address }
   ReceiptRecipient.Text := From.Text;
  end
  else
  begin {indicate that there is no receipt recipiant}
   ReceiptRecipient.Text := '';
  end;
 end;

 {authentication settings}
 case SmtpAuthType of
  0: SMTP.AuthenticationType := atNone;
  1: SMTP.AuthenticationType := atLogin; {Simple Login}
 end;
 SMTP.UserID := SmtpServerUser;
 SMTP.Password := SmtpServerPassword;

 {General setup}
 SMTP.Host := SmtpServerName;
 SMTP.Port := SmtpServerPort;

 {now we send the message}
 SMTP.Connect;
 try
  SMTP.Send(IdMsgSend);
 finally
  SMTP.Disconnect;
 end;
end;

         _________
  ∧,,∧   / 
 ミ,,゚Д゚彡<  BPLってDLLでしたっけ。
  ミつ つ  \ 
〜ミ  ミ.     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  U U  世の中ややこしい事でイパーイね。
0251デフォルトの名無しさんNGNG
>>249
cscompmgd.dllを参照すべし。
0252デフォルトの名無しさんNGNG
>>29の一部だけ。あとはGUIでD&D対応すればいいだけ。

using System.Diagnostics;
using System.IO;
using System.Text;
using System.Web.UI;

class Test
{
  public static void Main() {

    // CSVの読み込み
    string csv_text = null;
    using ( TextReader r = File.OpenText("data.csv") ) {
      csv_text = r.ReadToEnd();
    }

    // HTMLの書き込み
    using ( TextWriter w = new StreamWriter("table.html", false, Encoding.Default) ) {
      HtmlTextWriter w2 = new HtmlTextWriter(w, " ");

      w2.WriteFullBeginTag("html");
      w2.WriteLine();

      w2.Indent++;
      w2.WriteFullBeginTag("body");
      w2.WriteLine();

      w2.Indent++;
      w2.WriteBeginTag("table");
      w2.WriteAttribute("border", "1");
      w2.Write(HtmlTextWriter.TagRightChar);
      w2.WriteLine();
■ このスレッドは過去ログ倉庫に格納されています