VB Fabric 배열을 통해 데이터 VC를 입력하여 DLL 작성

3994 단어 dll
앞에서 말한 너무 많은 예가 어떻게 VC가 동적 링크 라이브러리를 작성하는지를 설명하는데 VB에서 설명한 후에 사용하지만 이 문제를 깊이 있게 연구하는 좋은 글이 하나도 없다. 본고는 이런 문제를 해결하는 것을 책임진다.본문 예시 소스 코드 다운로드 크기: 125K 1.일반적 상황
VB의 정의는 다음과 같습니다.
Private Declare Function FuncFoo Lib "MyStDll.DLL" _
(ByVal lParam1 As Long, ByVal lParam2 As Long) As Long

VC의 정의는 다음과 같습니다.
 UINT WINAPI FuncFoo(UINT lParam1, UINT lParam2);

말하지 않아도 두 개의 롱 매개 변수가 값에 따라 전달되는 것을 알 수 있다
2. 유형 배열 구현:
VB의 정의는 다음과 같습니다.
Private Declare Function FuncFoo Lib "MyStDll.DLL" _
(lParam1 As Long, ByVal lParam2 As Long) As Long

VC의 정의는 다음과 같습니다.
UINT WINAPI FuncFoo(UINT lParam1[DATASIZE], UINT lParam2);
여기서 DATASIZE는 정의 상수입니다.
ByRef는 주소에 따라 파라미터를 전달한다. 물론 VB의 기본 파라미터 형식인 ByRef는 그룹의 첫 번째 데이터를 전송한다. 바로 이 유형의 그룹의 주소이다. 사용법은 다음과 같다.
...
Dim oData(1 to 3) as Long
oData(1) = 100
oData(2) = 200
oData(3) = 300
Call FuncFoo(oData(0),3)
...

3. 구조 배열 구현:
이때 VB에 이러한 방법을 사용하는 경우 다음을 수행합니다.
Private Type LPDATA
Row as Long
Col as Long
Tips as String
Data as double
End Type
Private Declare Function FuncFoo Lib "MyStDll.DLL" _
(lParam1 As LPDATA, ByVal lParam2 As Long) As Long

VC에 이렇게 쓰여 있습니다.
typedef struct tagData {
UINT Row;
UINT Col;
BSTR Tips; // BSTR ,
double Data;
} * LPDATA;
UINT WINAPI FuncFoo(LPDATA lParam1[DATASIZE] ,UINT lParam2);
UINT WINAPI FuncFoo(LPDATA *lParam1 ,UINT lParam2);
이런 결과는 여러분도 한 번 해 보세요. 데이터가 불규칙하고 저도 잘 모르겠어요. 인터넷 SOS, HELP me, 현재 가장 유행하는 방식, 저도 사용했습니다. 국내외에서 유명하고 잊혀진 구석 등등. 여러분은 저를 거들떠보지도 않고 이해가 안 될 수도 있습니다. 중고수들은 깊이 있고 간단명료한 생활을 하고 대답도 없고 대답도 없습니다. 저는 MSDN에서 드디어 얻은 것이 바로 SAFEARRARY입니다.
typedef struct FARSTRUCT tagSAFEARRAY {
unsigned short cDims;
unsigned short fFeatures;
unsigned short cbElements;
unsigned short cLocks;
unsigned long handle;
void HUGEP *pvData ;
SAFEARRAYBOUND rgsabound[1];
} SAFEARRAY;
다음에 나는 단독으로 원고를 써서 이 물건을 토론하고 문제를 먼저 해결할 것이다.이렇게 해야 돼요.
VB에 다음과 같이 적으십시오.
Private Type LPDATA
Row as Long
Col as Long
Tips as String
Data as double
End Type
Private Declare Function FuncFoo Lib "MyStDll.DLL" _
(lParam1() As LPDATA, ByVal lParam2 As Long) As Long
사용법은 다음과 같습니다.
...
Dim oData(1 to 3) as Long
oData(1) = 100
oData(2) = 200
oData(3) = 300
Call FuncFoo(oData(),3)
...
VC에
typedef struct tagData {
UINT Row;
UINT Col;
BSTR Tips; // BSTR ,
double Data;
} * LPDATA;
UINT WINAPI FuncFoo(LPSAFEARRAY FAR * Param1,UINT lParam2);
VC에서 VB가 전송하는 패브릭 데이터에 액세스합니다.
LPDATA lparDataSet;
lparDataSet = (LPDATA)((*Param1)->pvData);
for (UINT u=0;u<((*Param1)->rgsabound->cElements);u++,lparDataSet++)
{
UINT aa = lparDataSet->Row;
CString bb = lparDataSet->Tips;
double cc = lparDataSet->Data;
}

주의: 왜 BSTR로 LPCTR xxx, TCHAR xxx[mmm],char xxx[mmm]를 쓰지 않습니까? 제가 예를 들면 여러분이 한번 해 보시면 알 수 있습니다.
1. VB 입력 문자 "개 크기 12"
2. 일반 VC 표시 데이터는 B8 F6 B4 F3 31 32
3. VC 구조 전송 디스플레이는 2A 4E 27 59 31 00 3200(유니코드?)
첫 번째 부분은 여기까지 쓰고, 남은 것은 여러분 스스로 천천히 더듬어 보아야 하며, 황급히 누락된 점이 있기 때문에 양해해 주십시오.
 
from: http://www.vckbase.com/document/viewdoc/?id=274

좋은 웹페이지 즐겨찾기