Chamando uma função DLL do VB6 com um UDT (Tipo Definido pelo Usuário) complexo a partir de C #

Estou escrevendo um aplicativo C # para chamar uma DLL de VB6 de terceiros. Eu adicionei referência à DLL do VB6 na guia Referências-> COM.

Um método específico na DLL usa um VB6 UDT (tipo definido pelo usuário) como parâmetro.

Esse UDT é mostrado como uma estrutura no wrapper .NET gerado automaticamente para COM. A estrutura possui muitos UDTs / estruturas filho, além de membros do tipo VBA.Collection (conforme mostrado pelos metadados do .NET). Ele também possui tipos de dados regulares, como string, short, double, int etc.

Estou inicializando essa estrutura no meu código c # como:

udtEmployee udtEmpData = default(udtEmployee);

Eu também tentei

udtEmpData = new udtEmployee();

Se eu não inicializá-lo usando padrão ou novo, não consigo compilar meu código C #, pois o compilador reclama do uso de variável não atribuída.

Eu preciso passar essa estrutura como referência. Eu estou fazendo assim:

clsEmployee.SetData(ref udtEmpData);

Ao chamar esse método da DLL do VB6, estou recebendo um erro:

Erro: Tentativa de ler ou gravar memória protegida. Isso geralmente indica que outras memórias estão corrompidas.

Qual é o motivo e qual é a solução?

Observe que não posso alterar a DLL do VB6 porque não tenho o código fonte. Estou usando o VS 2005.

EDIT 1:

Aqui está um histórico completo:

Existe um produto ERP desenvolvido localmente, que suporta o desenvolvimento de complementos usando o VB6. Possui um arquivo de configuração, que especifica os nomes das DLLs de complemento a serem carregadas. Esses complementos são exibidos em um menu no aplicativo ERP. No clique do menu, o ERP chama uma função com o nome StartAddOn () que deve estar presente na DLL do VB6.

Como eu queria desenvolver um complemento em C #, desenvolvi um complemento VB6 simples com um método StartAddOn, que por sua vez passa o controle para minha DLL do .NET.

A DLL do .NET usa as classes de negócios expostas pelo ERP e passa objetos de dados para lá e para cá. Na DLL do .NET, eu adicionei uma referência COM à DLL publicada pelo fornecedor do ERP.

Portanto, a arquitetura é assim: ERP-> VB6 AddOn com o método StartAddOn ->. NET DLL-> usa COM DLL publicada pelo fornecedor do ERP e suas classes de dados (structs / UDTs).

Como posso depurar o erro de memória?

questionAnswers(1)

yourAnswerToTheQuestion