X



D言語 Part34©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net
垢版 |
2015/01/25(日) 12:07:29.52ID:gAd5OZDm
プログラミング言語 D (D Programming Language) について語るスレッドです。

■本家
http://dlang.org/ - 公式(英語)
http://www.kmonos.net/alang/d/ - 公式の和訳 (やや古いので注意)
https://issues.dlang.org/ - D言語バグ報告
https://github.com/D-Programming-Language - D言語開発リポジトリ

■Wiki
http://wiki.dlang.org/ - 公式Wiki
http://dusers.dip.jp/ - D言語友の会(日本語フォーラムあり)

■プログラミング言語D (TDPL: The D Programming Language)
Andrei Alexandrescu 日本語版
http://www.shoeisha.co.jp/book/detail/9784798131108

ソース貼付サイト http://dpaste.dzfl.pl/
<$><$> https://www.bountysource.com/trackers/383571-d-programming-language

■前スレ
D言語 Part33
http://toro.2ch.net/test/read.cgi/tech/1396145538/

■過去スレ、関連スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=D%8C%BE%8C%EA&;sf=2&all=on&view=table&shw=5000
0261デフォルトの名無しさん
垢版 |
2015/11/15(日) 15:01:11.74ID:4YAQhy/L
自作のプログラムを実行すると毎回同じ場所でobject.Error: Access Violationが発生します。
エラーとは関係なさそうな修正(stderr.writeln()を増やしたり減らしたり)をするとエラー発生の場所が変わったり、
InvalidMemoryOperationErrorに変わったりします。
エラーの原因がさっぱり分からないんですけど、どういうことが考えられるでしょうか?
0263デフォルトの名無しさん
垢版 |
2015/11/15(日) 16:21:30.07ID:4YAQhy/L
GCのある言語でメモリリークとなると、どういうケースがあるのか想像がつかないです。
エラー発生の場所も変わるので謎です。
0265デフォルトの名無しさん
垢版 |
2015/11/15(日) 17:07:38.68ID:lu/bgS1P
こマ?初めて聞いたその結び付け
リーク=解放処理漏れ 以外の認識ないわ
0266デフォルトの名無しさん
垢版 |
2015/11/15(日) 17:19:50.76ID:4YAQhy/L
newする前のクラスのインスタンスの関数を使ってAccess Violationが出たことは過去にありますね。
しかし、今回はちゃんとnewされているし、1回目の呼び出しでエラーが発生してるわけでもないんですよね。
そして>>261で書いたようにstderr.writeln()を追加するだけでエラー発生のタイミングが変わるので難解です。
0267デフォルトの名無しさん
垢版 |
2015/11/15(日) 18:08:15.11ID:PV6fOtMt
初期化してない変数でアクセス
0268デフォルトの名無しさん
垢版 |
2015/11/15(日) 18:39:09.01ID:ndJn5r2D
AVならばぬるぽか RangeErrorか deleteの間違い
-g -debug してないんかいな

InvalidMemoryOperationError 
ならばデストラクタの中で何か変なことしてる疑い

デストラクタの中でdeleteとかしちゃダメダメよ〜
0269デフォルトの名無しさん
垢版 |
2015/11/15(日) 18:44:09.41ID:zgz009B6
似たことなったことあるなあ。なんやったか。
templateとかmixinがらみで依存関係見落としててobjの更新忘れとか。
0270デフォルトの名無しさん
垢版 |
2015/11/15(日) 19:02:33.53ID:4YAQhy/L
すみませんReleaseビルドになってました。
DebugビルドにしたらRangeErrorになりました。
0271デフォルトの名無しさん
垢版 |
2015/11/15(日) 19:09:44.01ID:PV6fOtMt
報告乙
0272デフォルトの名無しさん
垢版 |
2015/11/19(木) 16:51:28.76ID:I2rQS35X
char *hoge[] = new char *[N];
scope(exit) free(hoge.ptr);
とするのと
char **hoge = cast(char **)(new char *[N]);
scope(exit) free(hoge);
とするのとでは同じ動作が期待出来ますか?

あとガベコレを期待するなら
scope(exit) free(hoge.ptr);

scope(exit) free(hoge);
もどちらも不要ですか?
0273デフォルトの名無しさん
垢版 |
2015/11/19(木) 23:48:30.24ID:kWkiLP1L
色々とカオス(感想)
C : malloc/free
C++: new/delete

D : new/[destroy]
GCがあるので解放は不要だが、領域が不要になったことをdestroyで明示してもよい
ただしdestroyで領域が即時解放されるわけでなく、GCが必要に応じてよしなにやる
C++のdeleteと区別するために、destroyになった(想像)
---
auto hoge = new int[][N]; // int型の動的配列をN要素もてる動的配列(二次元配列)
foreach (elem; hoge)
elem = new int[色々]; // ジャグ配列も可能
// 以下は不要(してもよい)
foreach (elem; hoge)
destroy(elem);
destroy(hoge);
---
GCを使わずmalloc/freeすることも一応可能
(今だと、std.experimental.allocatorを使うべき?)
newしたものをfreeすることに保証はないと思う、知らんけど
0275デフォルトの名無しさん
垢版 |
2015/11/20(金) 10:48:03.85ID:LnAg0HCn
ありがとうございます!!
0276デフォルトの名無しさん
垢版 |
2015/11/20(金) 22:50:35.51ID:KMWFgUCm
クラスのstaticメンバ関数で、継承先の型って見られますか?

class Base {

static T[] takusanMake(T)(int n) { //Hogeから呼んでT=Hogeがほしい
T[] ret = new T[n];
foreach (ref e; ret) {
e = new T;
}
// ... Baseのフィールドしかいじらないような設定 ...
return ret;
}

}

class Hoge : Base {
}

void main() {
//Hoge
auto hoge = Hoge.takusanMake(30);
}

内容はともかく、大体こんな感じのことをしたいです
Baseから派生したクラスで定義するとか、ちゃんと!(Hoge)してもいいんですが、
(this T)を見てから何か方法があるような気がしてきて・・・
0277デフォルトの名無しさん
垢版 |
2015/11/21(土) 13:20:00.57ID:1cOWOBSi
staticなメンバ関数からは、thisは見えないので
UFCS前提でいっそ外部に出して
===
import std.stdio;

class Base {}
class Hoge : Base {}
class Other {}

T[] takusanMake(T : Base)(lazy T d, int n) {
auto ret = new T[n];
foreach (ref e; ret) {
e = d();
}
return ret;
}

void main() {
auto hoge = (new Hoge).takusanMake(30);
typeid(hoge).writeln;
// Baseに暗黙変換できない型はNG
//auto other = (new Other).takusanMake(30);
}
===
こういうのはどうだろう
(もっといい方法ありそう。。)
0278デフォルトの名無しさん
垢版 |
2015/11/21(土) 14:42:18.71ID:8z9xCqW5
Hoge という型と Fuga という型があって

Hoge[Fuga] hage;
という連想配列は定義できるみたいなのですが

Any という任意の型があるとして
Any[Any] moge;
みたいな連想配列は作れますか?
0279デフォルトの名無しさん
垢版 |
2015/11/21(土) 14:47:56.80ID:8z9xCqW5
ちなみに
["A": "B", "C": 3, 4: "E"]
みたいなのを作りたいのです
0281デフォルトの名無しさん
垢版 |
2015/11/21(土) 22:31:38.28ID:jpeEJ7vY
import std.variant;
auto moge = [Variant("A"): Variant("B"), Variant("C"): Variant(3), Variant(4): Variant("E")];
とかいうダサい感じのしか思いつかない。
0282デフォルトの名無しさん
垢版 |
2015/11/21(土) 23:35:17.00ID:BXVotCtM
>>277
確かにもう外に出してしまう方がいいかもしれないですね
外に出すことは考えてなかったのでもうちょっと考えてみます
0284デフォルトの名無しさん
垢版 |
2015/11/22(日) 12:42:54.55ID:rXOpUu6m
>281
ダサくてよければ

Variant[Variant] constructor(T...)(T plist){
Variant[Variant] result;
foreach(ref p; plist) result[new Variant(p.keys[0])] = new Variant(p[p.keys[0]]);
return result;
}
Variant[Variant] moge = constructor(["A": "B"], ["C": 3], [4: "E"]);

試してないけど
0286デフォルトの名無しさん
垢版 |
2015/11/22(日) 18:34:22.00ID:uPJ5yBy3
import std.variant;
import std.stdio;

Variant[Variant] makeTable(T...)(T p) {
static assert(T.length%2 == 0);
Variant[Variant] t;
foreach (i, ref v; p) {
static if (i%2 == 0) {
t[Variant(p[i])] = Variant(p[i+1]);
}
}
return t;
}

void main() {
auto t = makeTable(1, 2, "hoge", 123.2);
writeln(t);
}
0291デフォルトの名無しさん
垢版 |
2015/11/24(火) 12:03:53.42ID:Dj+m8Q01
>>284>>286 ってどちらもコンパイル時に
解決された型変換のコードが生成されるのですか?
つまり前者も後者も実行時の速度パフォーマンスは同じですか?
0293デフォルトの名無しさん
垢版 |
2015/11/26(木) 17:49:18.83ID:yeqvnwwH
Dでcomのclientを書こうとして付属のサンプルソースを試したら動作しました

wshサーバーをdispatchしてEcho('hoge')みたいなポップアップを出したいのですが
サンプルをどのように書き直せばよいのですか
0294デフォルトの名無しさん
垢版 |
2015/11/26(木) 17:58:08.82ID:yeqvnwwH
途中まで書いたコードです
extern (Windows) HRESULT CLSIDFromProgID(const wchar *, CLSID *);
const string wsh = "WScript.Shell";
interface IWSH : IUnknown {
extern (Windows) int Echo();
}
DWORD dwVer = CoBuildVersion();
HRESULT hr = CoInitialize(null);
hr = CLSIDFromProgID(wsh.toUTF16z(), &clsid);
IWSH pIWSH;
hr = CoCreateInstance(&clsid, null, CLSCTX_ALL, &IID_IUnknown, &pIWSH);
// FAILED(hr)の判定コードは省略していますがここまでは動作しているようです
// pIWSHに値は入っているようですが次の場所でAccessViolationします
pIWSH.Echo();
CoUninitialize();

pIWSH.Echo(); の行をコメントアウトすると何も起きませんが正常に完了します
あと
&IID_IUnknown
のところを
&IID_IDispatch
に書き換えてもだめでした
0296デフォルトの名無しさん
垢版 |
2015/11/27(金) 08:55:22.81ID:H96QzFnR
>>294
IDLとかタイプライブラリとか見ずに静的バインディングしようとしてる
普通は中間ヘッダを入手するかツールで生成する
C++で一度やったことがないとダメ

ちなみに >>295 は動的バインディング
0298デフォルトの名無しさん
垢版 |
2015/11/27(金) 10:48:43.15ID:Og1YQ9Di
>>297
うっかり勘違いしてました

標準のinterfaceから継承する方法ですが
interface IWSH : IUnknown { // add vtbl to define as IDispatch
extern (Windows) HRESULT GetTypeInfoCount(UINT *);
extern (Windows) HRESULT GetTypeInfo(UINT, LCID, REFIID);
extern (Windows) HRESULT GetIDsOfNames(REFIID, LPOLESTR *, UINT, LCID, DISPID *);
extern (Windows) HRESULT Invoke(DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *);
}
にして
hr = CoCreateInstance(&clsid, null, CLSCTX_ALL, &IID_IDispatch, &pIWSH);
したら
後は >>295 さんと同じように PopUp("Hage") を Invoke 出来ました
ほんとうにありがとうございました
0299デフォルトの名無しさん
垢版 |
2015/11/27(金) 11:49:41.82ID:c/N8jVfb
質問です。
SysTime st = Clock.currTime();
writefln("%s", st.toISOExtString());
writefln("%s", st.toISOString());
の動作で末尾の小数点以下の数字 (hnsecs) が
7桁になるときと6桁になるときがあるみたいです。

先頭の 0 が表示されないケースがあると思ったのですが
通常の '年月日T114500.1234567' 以外に
'年月日T114500.0123456' は表示されました。
ところがたまに '年月日T114500.123456' と表示されることがあります。
つまり '年月日T114500.0123456' なのか '年月日T114500.1234560' なのか判りません。
hnsecs==0 のときにこのパターンがあるみたいなのですがみなさんのところはどうですか?
DMD32 D Compiler v2.063.2
です。
0300デフォルトの名無しさん
垢版 |
2015/11/27(金) 11:52:34.38ID:c/N8jVfb
ちょっと紛らわしいので一部訂正します。

x 小数点以下の数字 (hnsecs) が
o 小数点以下の数字 (total hnsecs) が

x hnsecs==0 のときにこのパターンが
o msecs==123, usecs=456, hnsecs==0 のときにこのパターンが
0302デフォルトの名無しさん
垢版 |
2015/11/27(金) 15:13:20.37ID:c/N8jVfb
なるほど小数点以下だから末尾の0は除かれるんですね。
7桁だと思って決め打ちしない方が良いですね。
0303デフォルトの名無しさん
垢版 |
2015/11/27(金) 15:16:44.79ID:c/N8jVfb
Duration d = hoge - fuga;
d.total!"msecs", d.total!"usecs", d.total!"hnsecs" を使うことにします。
0304デフォルトの名無しさん
垢版 |
2015/11/28(土) 10:52:50.96ID:BU0Z8dtz
python の __getattr__
ruby の method_missing
javascript の __noSuchMethod__
みたいなものを期待して
D で同じようなものが有るかどうか検索したら
http://forum.dlang.org/post/op.usipp0mij5j59l@my-tomato
というやりとりが見つかりました
そこのサンプルをコンパイルしようとしたのですがエラーになります
D で opDotExp ってどう使うんですか?
0305デフォルトの名無しさん
垢版 |
2015/11/28(土) 11:37:36.45ID:3W8Apw0w
opDispatch()

ただし型のコントロールは引数とか名前付けとか工夫して自前で面倒を見る必要がある
0308デフォルトの名無しさん
垢版 |
2015/11/30(月) 20:34:23.05ID:SJumDZBl
有賀d
0309デフォルトの名無しさん
垢版 |
2015/11/30(月) 20:43:06.11ID:SiMJvgO4
IDispatch で
auto xl = Dispatch("Excel.Application");
xl.Visible = true;
auto workbooks = xl.Workbooks;
まではうまく逝くのに
auto book = workbooks.Add();
で Access Violation してしまう
何が間違ってるんだろう
0311デフォルトの名無しさん
垢版 |
2015/12/01(火) 08:39:45.47ID:yW8K+bhB
Add がデフォルト引数を持ってるけど引数明示したらどうなるかな
ぐぐったら xlFileFormat 列挙型 とか出てくる
0312デフォルトの名無しさん
垢版 |
2015/12/01(火) 20:10:30.52ID:9BYkXgQy
a.unknownproperty = hoge;
みたいなのも opDispatch!"unknownproperty"(Args args...) で書けますか?
0315デフォルトの名無しさん
垢版 |
2015/12/02(水) 05:34:41.55ID:53wnCEvY
さっきから変な現象になりました
windows10 なのですが
import std.stdio;
int main(string[] args)
{
writefln("@");
return 0;
}
だけのファイルを d_opDispatch.d というファイル名で保存して
dmd -run d_opDispatch.d を実行しても何も表示されないので
dmd d_opDispatch.d を実行して出来た d_opDispatch.exe を
cmd.exe から実行すると UAC のポップアップが出ていることがわかりました
そのまま許可すると別の cmd.exe が開かれてその中で @ が出力されています
また d_opDispatch.exe を test.exe に rename したら UAC は出なくなりましたω
それで test_opDispatch.exe にするとまた UAC が出たので
test_op_Dispatch.exe とか op_Dis_patch.exe とか試したのですが
この二つも UAC が出てきますω
また test.exe に戻したら普通に動くようになりました
ソースのときのファイル名は関係ないみたいなので
dmd -oftest.exe -run d_opDispatch.d
でとりあえず解決は出来てるんですけど何なんですかねこれ
windows10 のブラックリストに登録されちゃってるんですか?ω
それともうちだけですか?
0321デフォルトの名無しさん
垢版 |
2015/12/03(木) 01:25:39.08ID:y1qNQeGi
名前付きenumが普通に想像するようなenum
名前なしenumは常時インライン展開されてデータセクションに出力されないconstもどき、じゃなかったっけ

その上で 型.メンバ の形で使えるプロパティは 変数(定数).メンバ の形でも使えるというだけのような気がする
0322デフォルトの名無しさん
垢版 |
2015/12/03(木) 01:51:22.50ID:2XsySS+x
>>321
なるほど、(名前付き)enumが型という認識が不足してたのか
それなら各要素自体はprivateじゃないからアクセスもできて当然なのかな
ありがとう
0323デフォルトの名無しさん
垢版 |
2015/12/04(金) 09:37:05.62ID:prxSfFNA
auto hoge(T...)(T args){ return args[0] ; }
みたいな関数があるとき

呼び出し側で
auto fuga = hoge();
で呼ばれたか
auto fuga = hoge;
で呼ばれたか
どちらなのかを呼ばれた側で区別出来ますか?
0324デフォルトの名無しさん
垢版 |
2015/12/04(金) 11:41:34.38ID:qnfnKzej
たぶん無理
それにその辺りの仕様はふらついているので
今の仕様で組んでも後でダメになる可能性がある
0325デフォルトの名無しさん
垢版 |
2015/12/04(金) 15:12:03.13ID:prxSfFNA
call と get と set を実装して dispatch する目論見だったんですが
PyObject だと get と call の区別が微妙なんです
0326デフォルトの名無しさん
垢版 |
2015/12/04(金) 15:29:35.37ID:eLJR6e6w
DWT(https://github.com/d-widget-toolkit/dwt)を試しているのですが
Drag and Drop のサンプル(snippetxx.d)が全く見つからないので
SWT(http://www.eclipse.org/swt/snippets/#dnd)を取ってきて試すも
cannot cast expression event.data of type object.Object to string
のコンパイルエラー、cast じゃダメなので何がしかの変換が必要らしい

で、DWT の Drag and Drop はこんな感じで
動かしてるよ〜という情報をお持ちの方おしえてくださいませm(_ _)m
0328デフォルトの名無しさん
垢版 |
2015/12/04(金) 18:01:46.27ID:5R2qZuA/
2.069.2でDelimited Strings内にASCII以外があると怒られるよぅ
q"EOS
日本語 ← Error: character 0xa5 is not a valid token
EOS"
0330デフォルトの名無しさん
垢版 |
2015/12/05(土) 11:43:03.20ID:pK0sc289
>>324
とりあえず呼び出し側で
auto fuga = hoge.unknownmethodcall([]);

auto fuga = hoge.unknownproperty;
で区別することにしたらうまく別けられました
ところが今度は
hoge.unknownproperty = hage;
で代入しようと hoge class 内で
void opDispatch(string propertyname, T)(T arg){
}
と setter を定義したのですが
hoge.unknownmethodcall([]);
の方まで setter に奪われるようになってしまいました
0332デフォルトの名無しさん
垢版 |
2015/12/06(日) 13:00:28.84ID:OHUYOsyJ
ああテンプレートで呼び分けるんじゃなくて
全部まとめて一ヶ所で受けて if で分けるんですね
参考になります
ありがとうございます
0333デフォルトの名無しさん
垢版 |
2015/12/07(月) 22:12:53.36ID:yUJmRPdi
import std.process;
で pipeProcess とか spawnProcess とか使えるのは判ったのですが
windows で win32api の CreateProcessAsUser とか CreateProcessWithLogonW
に相当することが実行可能なモジュールはありますか?
0334デフォルトの名無しさん
垢版 |
2015/12/07(月) 22:30:26.17ID:ka6hrItk
標準では最低限のAPIしかないので
自分でポーティングするか拾ってくるかしましょう
0336デフォルトの名無しさん
垢版 |
2015/12/09(水) 01:01:38.90ID:Iqk5klbT
linuxで7zip.soのbindingを書こうとしています。7zipのC++側のIUnknownが
struct IUnknown
{
STDMETHOD(QueryInterface) (REFIID iid, void **outObject) PURE;
STDMETHOD_(ULONG, AddRef)() PURE;
STDMETHOD_(ULONG, Release)() PURE;
#ifndef _WIN32
virtual ~IUnknown() {}
#endif
};
このように宣言されているのですが、Dのinterfaceでデストラクタを宣言できなくて困っています。
超その場しのぎとして、DのIUnknownの宣言のReleaseの後にダミーのメソッドを、
・2個追加することでC++で実装されたinterfaceをDから呼び出すことが、
・1個追加することでDで実装されたinterfaceをC++から呼び出すことが、
それぞれできたのですが、とてもまともな解決策とは思えません。
どうすべきでしょうか。
0339デフォルトの名無しさん
垢版 |
2015/12/09(水) 10:05:46.43ID:IXqPU77s
winじゃなくてlinuxでやりたいみたいよ
一晩寝たら 空のデストラクタなんていらなかったんや
って気づくかもしれない
0340336
垢版 |
2015/12/09(水) 18:59:13.67ID:bSTrBSEY
>>337-339 クソして寝ましたが、仮に空(とはいえvirtual)のデストラクタがまるで無意味だったとしても、
bindingの体をとっているのでp7zip側のコードを変えるのはちょっと。
むしろvtblのズレが336程度の単純さならばソレで行くかと。
気になるのはDから呼ぶ場合とC++から呼ぶ場合の非対称性ですが、こういうもんなんですか?
0341デフォルトの名無しさん
垢版 |
2015/12/09(水) 19:32:29.57ID:sRhtlXMa
C++ネイティブの呼び出しっていつから「ちゃんと」できるようになったんですか?(小声)
0342336
垢版 |
2015/12/09(水) 20:30:12.63ID:bSTrBSEY
あ、非対称っていうのは勘違いだったかもごめ。
http://dpaste.dzfl.pl/4e7956f36a47
これで解決や!どうもありがとう!
>>341 WindowsでCOMを使った7zipのbindingはもっとすんなりいきましたよ。
0344デフォルトの名無しさん
垢版 |
2015/12/11(金) 10:36:51.24ID:Q/bqtNpc
振りかな?
0347名無しさん@そうだ選挙に行こう
垢版 |
2015/12/14(月) 11:06:28.62ID:baKxaSGv
自分のクラス(Fuga)を定義していて string へ変換するときに
Fuga f("hage");
string hoge = f;
みたいな書き方をしたいのですが
どんなメソッドを作っておけば良いのですか?
0350名無しさん@そうだ選挙に行こう
垢版 |
2015/12/14(月) 14:30:09.48ID:baKxaSGv
alias s_ this; とは驚きですが

Fuga f = new Fuga("123");
int i = f;
としたときでも i に 123 が入るようになりますか?

条件後出しですみません
0351名無しさん@そうだ選挙に行こう
垢版 |
2015/12/14(月) 14:33:32.26ID:baKxaSGv
ちなみに

Fuga f = new Fuga("123");
string s = f; // なら s = "123"; と同じ
int i = f; // なら i = 123; と同じ

という意味です
これも alias だけで出来てしまうんでしょうか?
0352名無しさん@そうだ選挙に行こう
垢版 |
2015/12/14(月) 15:09:08.43ID:2JSVZtRY
そういうのはたいてい変数に移して終わりじゃなくて、その先があるでしょ
例えば関数に渡すならその関数をテンプレートでうまくまとめるのが D流
単に出力するだけなら writeln(f)
0353名無しさん@そうだ選挙に行こう
垢版 |
2015/12/14(月) 17:11:34.59ID:reTGASBb
ここを参考に
http://www.kmonos.net/alang/wnd/topics/winapi.ja.html
Win32API を使って drag & drop を実装してみたところ
case WM_DROPFILES: の中で

HDROP dr = cast(HDROP)wp;
TCHAR[] buf = new TCHAR[MAX_PATH];
int l = DragQueryFile(dr, 0, buf.ptr, buf.length);
if(l < buf.length) buf[l] = 0;
string bs = to!string(buf[0..l]);
version(Unicode){
writefln("0: %s", to!string(bs.toMBSz()));
string name = bs;
}else{
writefln("0: %s", bs);
string name = fromMBSz(bs.toStringz());
}
writefln("1: %s", name);

とすると
drag & drop したファイル名が 「森鷗(環境依存文字2)外��(環境依存文字3)る.ext」 のとき
最後の name の表示が -version=Unicode したときとしないときで結果が違います
toMBSz と fromMBSz とで不可逆なのは判るのですが
MBSz -> UTF8 するときも結果が違うのは何故でしょうか?
(ただし表示は違うのですが同じファイルが対象になってちゃんと動作します)
0354名無しさん@そうだ選挙に行こう
垢版 |
2015/12/14(月) 17:23:00.56ID:reTGASBb
文字化けしてるので補足

環境依存しない方の文字はこちらです
森鴎外叱る

2 鷗外

3 ��る

がそれぞれ環境依存文字です
この辺が関係ありそうなのですが fromMBSz のバグなのか何なのかよく判りませんでした
https://msdn.microsoft.com/ja-jp/library/cc419800.aspx
http://download.microsoft.com/download/B/0/9/B09F266D-8D54-4476-A3EC-E974CA5F61F8/BS_303.pdf
0355デフォルトの名無しさん
垢版 |
2015/12/14(月) 21:06:28.36ID:uspa+zNB
>>351
Multiple AliasThisを使えば可能
もちろんコンストラクタ内で変換して保持とかする必要はあるけど



……なので実装されるのを楽しみに待っててくれよな!
0356デフォルトの名無しさん
垢版 |
2015/12/15(火) 04:33:41.61ID:iPeNyqfl
>>353 SHIFT-JISに含まれてない文字だから仕方ないとおもわれ。
DragQueryFileAの方ではかわりに 63(ASCIIのハテナマーク)が送られてきてる。
A付関数のことなんて早く忘れるんだ!
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況