Tuesday 11 July 2017

Idiadatasource Loaddataforexe


Estou começando com o DIA SDK e tenho o seguinte código simples: se eu começar este do Visual Studio IDE, afirmar falha com EPDBNOTFOUND, mesmo que eu comece sem depuração. Mas se eu começar o mesmo programa fora do IDE, ele funciona bem e retorna SOK. Primeiro, pensei que era um problema de diretório de trabalho, então eu coloquei printf no início para ver se esse é o problema, mas não é o problema. O diretório de trabalho é o mesmo e o PDB está lá. O Visual Studio faz algo que afeta o comportamento do DIA SDKs Eu não vejo nada na documentação. Perguntou 13 de fevereiro às 14: 31Estendo ajudando um colega de trabalho que trabalha com o SDK de Acesso à Interface de Debug em C. Pelo que eu posso dizer, o msdia80.dll tem uma interface COM, então registrei a DLL (usando regsvr32) e voila Pode ser referenciado diretamente no projeto C. A ligação está interessada em IDiaDataSource :: loadDataForExe (). O terceiro parâmetro é um objeto que, de acordo com a documentação, precisa implementar a interface IDiaLoadCallback, IDiaLoadCallback2, IDiaReadExeAtOffsetCallback ou IDiaReadExeAtRVACallback. No entanto, essas interfaces não estão expostas na referência Dia2Lib. O mais perto que posso dizer, todas as outras interfaces definidas em dia2.h são expostas, exceto as exigidas pelo loadDataForExe (). Como posso implementar uma interface que eu não posso referenciar Ive, até tentei criar uma classe C não gerenciada que implemente a interface IDiaLoadCallback, envolveu-a em uma classe C gerenciada e crie uma biblioteca de classes que eu acesse no meu projeto C. No entanto, quando eu tentar chamar a minha classe gerenciada, uma exceção é lançada devido a uma montagem em falta. Eu não consigo ver por que eu teria que fazê-lo dessa maneira de qualquer maneira, mas valeu a pena disparar. Qualquer sugestão de ajuda seria muito apreciada, obrigado. Quinta-feira, 12 de abril de 2007 9:18 PM Estas interfaces estão expostas aos clientes C. Por exemplo, IDiaLoadCallback2 Você deve ser capaz de gerar um assembly de interoperabilidade a partir do typelib (não sabe se há um typelib ou não), ou no pior caso, imite a interface C em C, ao mesmo tempo que aplica as guids apropriadas. Objeto, uuid (AAAAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAAA), ponteiro de padrão (única) interface IMyInterface. IUnknown HRESULT Foo () torna-se o seguinte em C Guid (quotAAAAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAAAquot), InterfaceType (ComInterfaceType. InterfaceIsIUnknown) interface pública IMyInterface Heres um artigo msdn que fala sobre a geração de interfaces C do idl: Im tentando escrever alguns Código C que usa o SDK DIA (Debug Interface Access) para consultar um arquivo PDB. Utilizei o arquivo de lote descrito nesta pergunta para criar um conjunto de wrapper em torno da biblioteca de tipos DIA. Agora eu consegui criar instâncias das diferentes classes COM expostas pelo SDK. No entanto, apareceu um problema. O método IDiaDataSource :: loadDataForExe requer um objeto de retorno de chamada que implemente uma das seguintes interfaces: IDiaLoadCallback IDiaLoadCallback2 IDiaReadExeAtOffsetCallback IDiaReadExeAtRVACallback Todas essas interfaces são definidas no IDL, no entanto, elas não estão disponíveis na montagem gerada. Estou faltando alguma coisa, ou é a única maneira de implementar essas interfaces em C é primeiro declará-las manualmente usando as várias atribuições COM. Estou começando com o DIA SDK e tenho o seguinte código simples: Se eu começar este do Visual Studio IDE, Afirma falhar com EPDBNOTFOUND, mesmo que eu comece sem depuração. Mas se eu começar o mesmo programa fora do IDE, ele funciona bem e retorna SOK. Primeiro, pensei que era um problema de diretório de trabalho, então eu coloquei printf no início para ver se esse é o problema, mas não é o problema. O diretório de trabalho é o mesmo e o PDB está lá. O Visual Studio faz algo que afeta o comportamento do DIA SDKs Eu não vejo nada na documentação. Solicitado 13 de fevereiro às 14:31

No comments:

Post a Comment