STAP STAP

STAP = (動詞)スタップする、カシャカシャする(造語)
 

スポンサーサイト 

No. : --/--/--(--) --:--:--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

マーシャリングではまる 

No.317 : 2008/12/20(Sat) 17:11:29
今 Sinku.dll を C# から使おうと努力してるんですが…
Sinku.dll はネイティブで書かれた DLL ですから、マネージド環境から使おうと思ったら
一工夫いるわけです。
まぁ C# のシの字くらいまでしか分かってない俺が挑戦したわけですが、マーシャリングで
はまりましたorz

Sinku.dll には FILE_INFO という構造体があって、その中に動画情報が格納されます。
FILE_INFO 構造体は

typedef struct {
char name[STR_MAX_LENGTH]; //IN : ファイル名
int type; //IN/OUT : ファイル種別
char container[32]; //OUT : コンテナ名(ある場合のみ)
char error[STR_MAX_LENGTH]; //OUT : エラー(ある場合のみ)
char video[VA_MAX_STREAM_COUNT][STR_MAX_LENGTH]; //OUT : 映像の詳細
int video_count; //OUT : 映像の詳細の数
char audio[VA_MAX_STREAM_COUNT][STR_MAX_LENGTH]; //OUT : 音声の詳細
int audio_count; //OUT : 音声の詳細の数
char extra[EX_MAX_STREAM_COUNT][STR_MAX_LENGTH]; //OUT : 付属情報
int extra_count; //OUT : 付属情報の数
double playtime; //OUT : 再生時間(秒)
unsigned __int64 size; //OUT : ファイルサイズ
} FILE_INFO;


こうなっています。
マーシャリングではまったのが 3 つある二次元配列。
ここには最大 10 個のビデオとオーディオのストリームに関する情報が格納されます。
extra は MPEG2-TS かなんかに使うみたいで、最大 5 個です。
これをどうやってもクリアできない。

char の一次元配列(要するに文字列)は

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = STR_MAX_LENGTH)]
public string Name;

などとすればOKです(STR_MAX_LENGH は Sinku.h に書いてありますが 512 です)。
でも二次元配列はさっぱり。
ArraySubType に Unmanaged.LPTstr とか色々入れてみましたが、Type なんちゃら Exception でそんなの使えないぞゴルァとか深刻そうな Exception 等が発生してお手上げ状態。
あきらめて以下のようにしました。

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = STR_MAX_LENGTH)]
public string Video1;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = STR_MAX_LENGTH)]
public string Video2;
・・・
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = STR_MAX_LENGTH)]
public string Video10;

強引な力技です。配置さえあってりゃいいんですよ!HSP で構造体を扱うときもそうでした。

まぁコンテナ名や長さの取得はできましたが上に書いた Video や Audio の値は「C空VIDEO」や「C空LAME」などという謎文字列になってしまったので・・・謎です。

まぁ今回は PlayTime が取得できれば良しなのであきらめます。
最後に、「続きを読む」に俺が書いたクソコードを提示しておきます。
C# は深いなぁ。どなたか分かる方いらっしゃいましたら教えてください。


黒羽さんに Sinku.dll を .NET で書き直してもらうのが一番早(ry
▼... Read more ≫
スポンサーサイト
| HOME |

calendar

S M T W T F S
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
11« 2008/12 »01

Profile

エイチム

Author:エイチム
programmingに
興味を示す高専生

Diary

Recent Comments

Archives

Category

Link

このブログをリンクに追加する

RSS


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。