VB6からVC6++作DLLへ引数受け渡しがうまくいきません

解決


愛新  2004-02-18 01:15:32  No: 82092  IP: [192.*.*.*]

##############################################
VC6側
struct aStruct
{
    int    lStart;
    int    lLen;
    char*  cFileName;
};
FCONVPROJREADWRITE_API short __stdcall fncRead(aStruct* pData,char* OutByte);
##############################################
VB6側
Public Type sInput
 lStart         As Long
 lLen           As Long
 cFileName      As String * 200
End Type
Public Declare Function fncRead Lib "FConvProjReadWrite.dll" (aData As sInput, ByVal oLineRead As Byte)
Private BBufR(0)        As Byte

With tsInput
  .lStart = 1
  .lLen = 1
  .cFileName = Space(200)
  .cFileName = Replace(InputFilePath, "\", "\\") & Chr(0)
End With
AnsDll = fncRead(tsInput, BBufR)

##############################################
と作ったのですが、VC側でデバッグをかけてみると、うまく格納していないみたいなのです。
結果が、
pData       0x0012f19c
├lStart    0
├lLen      4307969
└cFileName 0x00000001 ""
  └CX0030: Error: 式を評価できません
OutByte     0x0012f014 "■"
└          1 "■"

lStartに1 lLenに1 cFileNameにファイルのパス(日本語含む) のようになってほしいのですが、HPをまわっていろいろなパターンを試したのですがだめでした。
そして、引数のcFileNameを使い。
if((fp=fopen((*pData).cFileName,"rb"))==NULL){

としたいのですが、これも可能なのでしょうか?
指摘をよろしくお願いいたします。
最後ですが長文申し訳ありません。

編集    削除
ねろ  2004-02-18 05:34:33  No: 82093  IP: [192.*.*.*]

構造体にString 型が入っていると面倒なんですよね。
とりあえずこの辺を読まれたし。
http://support.microsoft.com/default.aspx?scid=kb;ja;410837
ファイルパスとファイル名を渡すので有れば、それらのASCコードをLong型の
配列に入れてDLLに渡し、DLL側で文字列に変換する方法もあると思います。

編集    削除
愛新  2004-02-18 18:56:11  No: 82094  IP: [192.*.*.*]

ありがとうございます。
これを見てまた色々試してみます。

編集    削除