VisualBasic으로 작성된 오래된 DLL이있어서 C#에서 함수를 호출해야합니다. 15 개의 기능 중 14 개의 기능이 이미 실행 중입니다 (콘솔 프로젝트로 테스트 됨). 나머지 함수는 어디 C#에서 호출하는 방법을 모르는 paramater PChar 있습니다.C#에서 VisualBasic DLL을 호출하지만 Pchar을 대체하는 방법은 무엇입니까?
실제로 동작 기능은 다음과 같다 :
[DllImport("C:\\DLL\\visualbasic.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
public static extern int command(out UInt32 pNumber);
public void Executecommand(out UInt32 pNumber, out int Res)
{
Res = command(out pNumber);
}
워킹 기능하지 두 파라미터 가지고 pData의 아웃 1.를 PChar를 2 CONST pDataLen (이 리턴되는 데이터의 길이)
VB DLL의 설명서에 따르면 함수를 호출하기 전에 메모리를 예약하고 함수가 끝나면 메모리를 확보하는 것이 중요합니다. 20 자이면 충분합니다.
누군가가 함수를 호출하는 방법에 대한 힌트를 줄 수 있습니까? 간단히 "문자열"을 사용하면 예외가 발생합니다. 처리되지 않은 예외 인 System.AccesViolationException이 발생했습니다. 추가 정보 : 보호 된 메모리를 읽거나 쓰려고 시도했습니다. 이것은 종종 다른 메모리가 손상되었다는 표시입니다.
도움 주셔서 감사합니다.
그건별로 도움이되지 않는 내용입니다. PChar는 델파이 타입이며, "out"과 "const"는 의미가 없습니다. 대부분의 올바른 인수 유형은 StringBuilder이며, RefSet 또는 Out이없고 CharSet.Ansi가 있습니다. 통화하기 전에 용량을 20으로 설정하십시오. 두 번째 주장은 반드시 int 일 뿐이지 만 심판이 필요한지 추측하기는 어렵습니다. –
나는 stringbuilder를 시도했다. 내가 "아웃"을 사용하지 않으면 함수가 실행되지만 stringbuilder 변수에 데이터가 없습니다. 내가 stringbuilder 변수에서 out 매개 변수를 사용하면 첫 번째 게시와 동일한 오류가 발생합니다. public void NotWorking (out 문자열 pData, int pDataLen, out int Res) { StringBuilder MyStringBuilder = new StringBuilder ("", 20); Res = Execute_NotWorking (MyStringBuilder, pDataLen) pData = MyStringBuilder.ToString(); } –