VB Fabric 배열을 통해 데이터 VC를 입력하여 DLL 작성
3994 단어 dll
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LoadLibrary에서 126 오류가 발생하면 원인이되는 파일 이름을 찾는 방법Loadlibrary에서 DLL을 동적으로 로드할 때 로드 실패입니다. 실패한 파일 이름은 알려주지 않습니다. 로드하고자 하는 DLL 자체를 로드할 수 없다면 이야기는 간단하지만, 대상 DLL이 다른 DLL을 로드하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.