IIS6 용으로 작성된 ISAPI 필터가 있습니다. 이제 IIS7 필터를 래핑하기 위해 IIS7 용 래퍼를 작성해야합니다. C#에서 HTTP 모듈을 작성하고 관리되지 않는 dll 메소드를 Pinvoke 할 계획입니다. 나는 다음과 같은 코드의 C#을 표현을 필요ISAPI 관련 메서드 및 구조를 C#으로 변환하는 방법
,
DWORD WINAPI HttpFilterProc(
PHTTP_FILTER_CONTEXT pfc,
DWORD notificationType,
LPVOID pvNotification
);
typedef struct _HTTP_FILTER_CONTEXT HTTP_FILTER_CONTEXT {
DWORD cbSize;
DWORD Revision;
PVOID ServerContext;
DWORD ulReserved;
BOOL fIsSecurePort;
PVOID pFilterContext;
BOOL GetServerVariable;
BOOL AddResponseHeaders;
BOOL WriteClient;
VOID * AllocMem;
BOOL ServerSupportFunction;
} HTTP_FILTER_CONTEXT, * PHTTP_FILTER_CONTEXT;
내가는 CodePlex에서 PInvoke를 Assistant를 사용하여 시도하지만 난 그것이 작동되도록 할 수 없습니다입니다. 이전에 이런 일을 한 사람이 있습니까? 누구나 위의 해결 방법을 제공 할 수 있습니까?
보정 : 네이티브 코드 컨텍스트 struct
에 대한 포인터를 전달
[DllImport(@"XyzISAPI.dll")]
public static extern uint HttpFilterProc(
ref HttpFilterContext pfc,
uint notificationType,
IntPtr pvNotification
);
에 의해 구조체를 전달 : 올바른 구조는 다음과 같은 사용해야 답변의 코드에
감사합니다. 이로 인해 디버깅시 PInvokeStackImbalance 예외가 해결되었습니다. 하지만 여전히 pvNotification이 0으로 반환되었습니다. 다른 세부 정보를 확인한 다음 여기에서 업데이트합니다. – GorillaCoder
귀하의 답변에 투표 할 수 없습니다. – GorillaCoder
''IntPtr.Zero'는'pvNotification' 매개 변수에 전달할 것이 아무것도 없을 때 전달됩니다. 당신은 투표에 대한 충분한 명성이 없지만 받아 들일 수 있습니다. –