タイトル | : Re^2: VB6.0で使用したDLLをVB.NETで使用したい |
記事No | : 5949 |
投稿日 | : 2007/07/31(Tue) 09:07 |
投稿者 | : まいど |
> > ソースは"declare"を使用しています。 > > 何か必要な設定等があるのでしょうか? > > ソース自体はほぼVB6.0からコピーする形でコーディングしました。 > > VB6とVB.NETでは結構変わっていますので、VB6のソースそのままでは問題があることがほとんどです。 > Declareで宣言して使用している外部DLLの場合、 > Declare文、および、それを使用している箇所のコードの見直しが必要です。 > > 例えば、VB6のLong(32bit)はVB.NETのLong(64bit)と型のサイズが異なります。 > こういった場合にVB.NETではInteger(32bit)を使う必要のある場合が多いです。 > #より適切な型を利用するにはそのDLLのC言語などでの宣言をみないとわからない場合もあります。 > > > よろしくお願いします。 > > Declareを使う場合に関係する変更点はいくつかありますので、 > Declareで宣言している箇所とその関数を利用している箇所付近の関連ソースを > みないとこれくらいしか言えないですね。
ありがとうございます。色々勉強になります。 ソースの方を掲載します。(DLLはオリジナルなので、名称等は記載できません。申し訳ない)。他の名称で何のソースか分かるかもしれませんが… ************************************************************Mojule@ Structure SIDE_STATUS Dim mem0 As Long Dim mem1 As Long Dim mem2 As Long Dim mem3 As Long Dim mem4 As Long Dim mem5 As Long End Structure
Structure CARD_STATUS Dim status As Long Dim state() As Long Dim ScannerName() As Byte Dim ScannerVer() As Byte Dim SerialNumber() As Byte Dim FirmVer() As Byte Dim Ri10_1Ver() As Byte Dim Ri10_2Ver() As Byte Dim FPGA_Ver() As Byte Dim side() As SIDE_STATUS ) End Structure
Structure CARD_STATUS_OCR Dim CARDSTATUS As CARD_STATUS Dim fullname() As Byte Dim birthday() As Byte Dim domicile() As Byte Dim address() As Byte Dim grantday() As Byte Dim validity() As Byte Dim license() As Byte Dim acquisition1() As Byte Dim acquisition2() As Byte Dim acquisition3() As Byte Dim condition() As Byte End Structure
Public Structure BITMAPFILEHEADER Dim bfType As Integer Dim bfSize As Long Dim bfReserved1 As Integer Dim bfReserved2 As Integer Dim bfOffBits As Long End Structure
Public Structure BITMAPINFOHEADER Dim biSize As Long Dim biWidth As Long Dim biHeight As Long Dim biPlanes As Integer Dim biBitCount As Integer Dim biCompression As Long Dim biSizeImage As Long Dim biXPelsPerMeter As Long Dim biYPelsPerMeter As Long Dim biClrUsed As Long Dim biClrImportant As Long End Structure Public Structure RGBQUAD Dim rgbBlue As Byte Dim rgbGreen As Byte Dim rgbRed As Byte Dim rgbReserved As Byte End Structure Public Structure BITMAPINFO Dim bmiHeader As BITMAPINFOHEADER Dim bmiColors() As RGBQUAD End Structure
Declare Function CardScanStart Lib "aaaaa" (ByVal crdSts As CARD_STATUS_OCR) As Long ************************************************************Form@ Dim lngRst As Long Dim crdStsOcr As CARD_STATUS_OCR Private Sub RD_Timer_Tick(ByVal sender As System.Object, _ByVal e As System.EventArgs) Handles RD_Timer.Tick lngRst = CardScanStart(crdStsOcr) ←実行時のエラー発生箇所 End Sub ************************************************************
こんな感じなのですが…VB6.0のコードをほぼそのままで、.NETに移行した感じです。よろしくお願いします。
|