У меня есть неуправляемый DLL, который содержит класс только с чисто виртуальными методами (вид обратных вызовов):
class PAClient
{
public:
__declspec(dllexport) virtual void SetCalculationStarted() = 0;
__declspec(dllexport) virtual void SetCalculationStopped() = 0;
}
Теперь я должен отправить эти вызовы функций в управляемый код C # и решил использовать интерфейс для этого. Вот что я сделал:
public interface class IPAClientWrapper
{
void SetCalculationStarted();
void SetCalculationStopped();
};
private class PAClientWrapper : public PAClient
{
private:
gcroot<IPAClientWrapper^> callBack;
public:
PAClientWrapper(IPAClientWrapper^ c)
{
callBack = c;
}
void SetCalculationStarted()
{
callBack->SetCalculationStarted();
}
void SetCalculationStopped()
{
callBack->SetCalculationStopped();
}
}
Но каждый раз, когда неуправляемый SetCalculationStarted()
неуправляемый код выдает исключение:
An unhandled exception of type 'System.AccessViolationException' occurred in PAnalysisLib.dll
Additional information: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
РЕДАКТИРОВАТЬ:
public partial class Form1 : Form, IPAClientWrapper
{
public Form1()
{
InitializeComponent();
}
public void SetCalculationStarted()
{
Console.WriteLine("started");
}
public void SetCalculationStopped()
{
Console.WriteLine("stopped");
}
}
Я что-то пропустил?
Задача ещё не решена.
Других решений пока нет …