OCX를 C++ 빌더 볼랜드로 만듭니다.C++ 빌더의 com dll에서 BSTR을 혼동했습니다.
- 로그인
- 쓰기
- 읽기
- DebugOutput
- GETVAL
내 C# 응용 프로그램이 OCX를 사용하고 있습니다 : 내 OCX 내가 그것을 설명 이러한 기능을 가지고 있습니다. C# 측면에는 단추와 목록 상자가 있습니다. 이 단추는 OCX에서 login
메서드를 호출하고 목록 상자에이 메서드의 출력이 표시됩니다.
OCX 측에서는 login
메서드는 서버 프로그래밍 (소켓 프로그래밍 사용)을 통해 인증을 얻습니다. 그런 다음 Write
함수를 호출하여 소켓에 쓰기 기능을 수행하십시오. 그런 다음 소켓에서 응답을 받고 Read
함수를 호출하여 소켓 응답을 읽습니다.
Read
결과를 읽은 다음 DebugOutput
으로 보내 출력 스트림을 디버그하고 GetVal
을 호출하여 마지막 주 서버 응답을 찾습니다. 그런 다음 매개 변수를 서로 전달합니다. 모든 C# 측에서 로그인 메소드에 대한 결과 (SUCCESS | FAIL)를 표시합니다.
BSTR을 사용했습니다. (나는 BSTR에 관한 주제를 stackoverflow과 MSDN에서 읽었다. 그러나 나는 내 솔루션에서 잘 이해하지 못했다고 생각한다.) OCX 측의 코드입니다.
BSTR STDMETHODCALLTYPE TVImpl::Login(BSTR PassWord)
{
wchar_t wcs1[500];
Var *var=new Var();
//here make the command
...................
//get the server response to show to user
BSTR read=::SysAllocString(Write(wcs1));
if(read!=NULL) ::SysFreeString(read);
return read;
}
BSTR STDMETHODCALLTYPE TVImpl::Read()
{
BSTR str ;
try
{
IdTCPClient1->ReadTimeout=100;
str =::SysAllocString(IdTCPClient1->IOHandler->ReadLn().c_str());
}
catch(Exception &e)
{
str= e.Message.c_str();
}
str=(DebugOutput(str));
return str;
}
BSTR STDMETHODCALLTYPE TVImpl::Write(BSTR str)
{
IdTCPClient1->IOHandler->WriteLn(str) ;
BSTR str2=::SysAllocString(L"TST");
str2=Read();
return str2;
}
BSTR STDMETHODCALLTYPE TVImpl::GetVal(BSTR st,BSTR ValTyp)
{
BSTR res;
AnsiString stAnsi;
//Do some thing with st and save it to stAnsi
.................
res=(BSTR)WideString(stAnsi);
return ::SysAllocString(res);
}
BSTR STDMETHODCALLTYPE TVImpl::DebugOutput(BSTR st)
{
Var *val=new Var();
BSTR res;
res=GetVal(st,val->CMD_CMD);
if(res==val->CMD_AUTHENTICATE)
res=GetVal(st,val->XPassword);
return res;
}
C3 코드에서 매달려있었습니다. 내 문제는 sysAllocString을 사용하는 것입니다. 하지만 나는 각 메소드에서 각각 하나씩 :: sysFreestring을 사용할 때 다시 C# 코드가 걸려있다.
이private void button4_Click(object sender, EventArgs e)
{
VinSockCmplt.Vin vin = new Vin();
listBox1.Items.Add(vin.Login("1234"));
}
같은 코드를 처음 달성하려고했던 것처럼, 그것을 지원 언어 가능 표시하는 데 사용됩니다,하지만 당신은 ... – BugFinder
을 보여 havent 한 무례 할 필요는 없습니다. – BugFinder
실례 합니다만 나쁜 것은 아닙니다. – MHM