2012-01-04 2 views
1

Я разрабатываю COM-совместимые классы с использованием Visual Studio 2008. И использование этих классов в Visual FoxPro 9.0 Когда я скомпилировал библиотеку классов, он регистрируется после компиляции.Метод отладки класса Com

В Visual FoxPro Я создаю объект с этим кодом кусок на окне командной строки:

newObj = CREATEOBJECT("CemT.Deneme.ClassTest") 

Когда я хотел Ставить библиотеки классов на Visual Studio я не могу собрать и снова зарегистрировать DLL. Это дает мне эту ошибку:

Unable to copy file "obj\Debug\clCOMTest.dll" to "bin\Debug\clCOMTest.dll". The process cannot access the file 'bin\Debug\clCOMTest.dll' because it is being used by another process. 

С этой ошибкой мне пришлось бы выйти из VFP и начать снова. Перед созданием объекта я компилирую библиотеку классов в Visual Studio. Тогда я могу использовать последнюю версию dll.

Это выглядит очень нормально из-за VFP, использующего dll, но есть ли способ сделать это без перезапуска VFP?

+0

DLL имеет жесткий замок на нем, потому что он был загружен в процесс FoxPro. Вам нужно будет убедить FoxPro снова выгрузить эту DLL. Глядя на документы, вам, по крайней мере, потребуется RELEASE. Как вы его называете CoFreeUnusedLibraries() - это догадка. Вместо этого протестируйте свой код с помощью модульного теста. –

+0

Единичный тест будет хорошим, но VFP вызовет классы .NET. Вот почему вызовы функций имеют разные типы параметров. Иногда передача различных параметров может быть трудной или невозможной. RELEASE ALL делает каждую переменную null определенной в окне Command. Но все же я не могу скомпилировать, он дает такую ​​же ошибку. – uzay95

+0

@HansPassant: Модульные тесты для языков без достойного графического отладчика с редактированием и продолжением! (Шутка: модульные тесты по-прежнему хороши, но они дополняют возможность отладки должным образом). – Ben

ответ

0

В VFP, вы пробовали

RELEASE БИБЛИОТЕКА {файл DLL}

или в документации, вы можете очистить все библиотеки API по

SET БИБЛИОТЕКА ДЛЯ

(без какого-либо конкретного имени библиотеки), чтобы очистить их

0

Назад, когда я использовал этот тип вещей (C++ COM-компоненты, предназначенные для использования с VB в качестве хоста), я использовал, чтобы установить командную строку «Отладка», чтобы открыть правильный проект в VB.

Другими словами, я запускал среду разработки VB в отладчике C++.

Это было хорошо, потому что я все еще могу установить точки останова в своей DLL и т. Д. И работать одновременно на обеих сторонах VB и C++. (Только не забудьте нажать кнопку «Сохранить» в VB, прежде чем нажать «Стоп» в C++!)

Я никогда не использовал FoxPro, но вы, вероятно, может сделать то же самое с опцией -C:

http://msdn.microsoft.com/en-us/library/bzb50fbk(v=VS.71).aspx

0

Это довольно просто, если я понимаю вопрос правильно, в VFP,

релиз newObj

0

VFP не полностью освободить COM-объекты из памяти до закрытия приложения.

Использование команды RELEASE не освобождает ее полностью.

Смежные вопросы