VB6 응용 프로그램을 VB.net으로 변환 중입니다. 응용 프로그램은 변경할 수없는 기존 C 라이브러리를 사용합니다.길이가 2의 보수를 저장하는 방법
문제 :-180
또는 180
주위의 값이 필요합니다. 내가 기대하는 시간은 180
입니다. 그러나 내가 -180
일 때 4294967117
값을 얻습니다. 이것은 C 라이브러리가 2의 보수를 반환하는 것처럼 보이지만 그것을 치료하는 방법을 모르겠습니다. 나는 또한 시도
If GetVal(VAL_A1, tmp) = ERR_VAL_NA Then
txtBoxPhaseAngle1.Text = "na"
Else
txtBoxPhaseAngle1.Text = Convert.ToDouble(tmp)
End If
을 :
이 작동하지 않습니다 VB.net 코드입니다Dim tmp As Long
If GetVal(VAL_A1, tmp) = ERR_VAL_NA Then
lblAngle(0).Caption = "na"
Else
lblAngle(0).Caption = tmp
End If
:
이
는 작동 VB6 코드txtBoxPhaseAngle1.Text = Convert.ToInt32(tmp)
txtBoxPhaseAngle1.Text = tmp
편집 : 나는 C 함수를 선언하는 방법
: C 코드에서 GetVal
기능에서
Declare Function GetVal Lib "Z:\Devel\RelayAPI\Debug\RelayAPI.dll" (ByVal what As
Integer, ByRef val As Long) As Byte
단편은 :
BYTE __stdcall GetVal(WORD what, long *val){
DWORD relaydate;
BYTE tmpb;
DWORD tmpd;
long tmp;
...
switch(what){
case VAL_A1:
tmpb=RelayAPI_Scaled;
if(tmpd<6){
*val=(short)((WORD)mon[38]+((WORD)mon[39]<<8));
}else{
*val=(short)((WORD)mon[32]+((WORD)mon[33]<<8));
}
break;
break;
}
C lib에서 값을 얻는 방법이 될 수 있습니다. 이것이 VB6의 포트 인 경우 esp. – Plutonix
C 라이브러리의 함수에 대한 추가 정보로 내 질문을 업데이트합니다. 절대적으로해야한다면 C 코드를 변경할 수 있지만 실제로 이상적은 아닙니다. – JuiCe
dllimport 기능은 어떻게 생겼습니까? 여러분은 -180과 4294967117 비트가 동일하게 보입니다. VB6에서 변환 할 때 dllimport 선언을 'long'에서 'integer'로 변경하는 것을 잊었습니까? – pmcoltrane