質問

を使用していWin32::API呼び出す機能を任意に輸出され、DLLを受け入れるC++構造のポインタです。

struct PluginInfo {
        int  nStructSize;   
        int  nType;     
        int  nVersion;    
        int  nIDCode;    
        char         szName[ 64 ];  
        char            szVendor[ 64 ];
        int  nCertificate;  
        int  nMinAmiVersion;
};

している必要があります"パック"機能を構築する構造を渡す必要がある引数

my $name = " " x 64;
my $vendor = " " x 64;
my $pluginInfo = pack('IIIIC64C64II',0,0,0,0,$name,$vendor,0,0);

そのな構築の構造。
この長さの引数に適用Cを鵜呑みの方に多くの論争することができます。
でもお勧めの最良の方法を構築しこの構造形式はPerlとpassonにはdllます。

おかげさまで、事前に
ナガKiran

役に立ちましたか?

解決

タグのように、テンプレートにZ(NUL詰めの文字列)を使用します
my $pluginInfo = pack('IIIIZ64Z64II',0,0,0,0,$name,$vendor,0,0);

また、 Win32::API::Struct のを見て、これのWin32 :: APIモジュールの一部です。

他のヒント

も複雑で、チェックアウト 変換::バイナリー::C.この困難な時はまさしくその通りなのだが、実力で目先制に成功します。

更新:私のタイアップムービー情報です。必見 特定のモジュールのmanpage の理由にお使い頂けます。私が引用で利便性:

を利用する理由に変換::バイナリー::C?

したいと言うパックまたはアンパックデータ は、下記のC 構造

struct foo {
  char ary[3];
  unsigned short baz;
  int bar;
};

きもちろん使用Perlパック と解凍機能

@ary = (1, 2, 3);
$baz = 40000;  
$bar = -4711;
$binary = pack 'c3 Si', @ary, $baz, $bar;

このことを意味する構造体 会員バイトが揃います。れた場合 長揃えのデフォルト ほとんどのコンパイラ)いを書く

 $binary = pack 'c3 x S x2 i', @ary, $baz, $bar;

なん増加 読む

これに必要なパックの データは全く異なる 建築の異なるバイト ます。うにパック manpageを再びもたち この:

$binary = pack 'c3 x n x2 N', @ary, $baz, $bar;

しかし、ごみ箱$foo 再度、ご署名の値が への符号なします。

すべてのことで適法かつ公正な手段で行 Perlです。があ構造の取得 複雑?想像しに必要なもの 支援がいろいろなプラットフォーム?想像 必要なものを変化させることができる 構造きない 変更は、C言語のソースでも数十人の パック内の文字列おPerlのコードです。この なに楽しいです。やPerlきます。

現ができるのではないれば良 直読では、C言語のソースまで 既に記述する全ての種類 定義が包及び 開封?その 変換::バイナリー::Cます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top