Улучшая ответ Винсента, я написал скрипт для этого: xcodearchive
Он позволяет вам архивировать (генерировать ipa) ваш проект через командную строку. Думайте об этом как о сестре команды xcodebuild
, но для архивации.
Код доступен на github: http://github.com/gcerquant/xcodearchive
Один из вариантов сценария - включить архивирование Символы dSYM в архиве с метками времени. Нет оправдания тому, чтобы больше не хранить символы и не иметь возможности символизировать журнал аварийного сбоя, который вы можете получить позже.
Вам просто нужен CLS_ID и идентификатор интерфейса. Я написал об этой конкретной проблеме в своем блоге:
Напишите обертку на VB.Net. VB.Net поддерживает истинное позднее связывание (без беспорядочного отражения). Все, что вам нужно, это прогид. Вы также должны реализовать IDisposable для явного управления жизненным циклом компонента.
Довольно часто вы встретите реализацию интерфейса, которая не поддерживается библиотекой типов (Delphi или иначе). Расширения оболочки - один из примеров.
По сути, вам нужно сделать вызов Windows API для создания экземпляра через соответствующие вызовы функций COM. API позаботится об управлении DLL через экспортированные функции, о которых вы упомянули ранее.
Вам нужно будет воссоздать определение интерфейса в коде C #, но после этого вы просто создаете объект, приведете его к интерфейсу, и это не отличается от всего остального. Единственное реальное предостережение: в зависимости от вашего использования могут возникнуть некоторые проблемы с потоками, с которыми нужно справиться, поэтому проверьте «модель потоков», которая использовалась для DLL, и рассмотрите свое использование на основе этого. Учебник
Да и нет.
Все, что нужно C # (и любой язык CLR) для взаимодействия с COM-объектом, является совместимым интерфейсом. подпись. Обычно указывается методы, GUID и стиль квартиры интерфейса. Если вы можете добавить это определение в свою базу кода, тогда в TLB нет необходимости.
В этом утверждении есть небольшая оговорка. Я думаю, вы это сделаете. попадете в неприятности, если попытаетесь использовать COM-объект за пределами квартиры и не зарегистрировали подходящий TLB. Однако я не могу на 100% вспомнить этот момент.
Это зависит от того, для какого контента вы хотите создать подпапку / -домены.
Связано ли это с вашим исходным сайтом? Тогда вам обязательно следует использовать подпапку, поскольку она принадлежит к тому же домену. Если вы используете подпапки, то гораздо лучше, чтобы ссылочная масса распространялась.
Что касается PageRank, лучше использовать подпапки.
Поддомены считаются новым сайтом. Подпапки - нет, и они получат более высокий рейтинг, если ваш исходный сайт является мощным.
Вы можете использовать как поддомены, так и подпапки, если хотите, но не забудьте использовать канонический тег, чтобы избежать дублирования контента.
Два соответствующие ссылки, которые объясняют это дальше:
http://www.searchmarketingstandard.com/when-to-use-subdomains-vs-subfolders http: //www.searchenginejournal.
Я подозреваю, что ключевое слово dynamic
(C # 4.0) выполнит это. Если это так, это даст результаты, которые в значительной степени эквивалентны вызову методов, то есть так, как предлагает Groo.
Если вам удалось создать экземпляр объекта, вы преодолели первое серьезное препятствие!
Теперь попробуйте следующее:
myObject.GetType().InvokeMember(
"ResObjOpen", // method name goes here
BindingFlags.InvokeMethod,
null,
myObject,
new object[] {
someClientID, // arguments go here
someSubId,
somFileName,
someInt} );
Я думаю, что вам может понадобиться сделайте это, если COM-объект Delphi не является «двойным» объектом. Он может поддерживать только позднее связывание, т. Е. Вид вызова, который вы видите выше.
(В C # 4.0 они упрощают эту задачу с помощью ключевого слова dynamic
.)
EDIT: Just заметил кое-что очень подозрительное. IID для интерфейса и CLSID для самого объекта кажутся одинаковыми. Это неправильно.
Учитывая, что вам удалось создать объект, это может быть CLSID объекта. Значит, это не тот IID. Вам нужно вернуться к своим коллегам по Delphi и попросить их рассказать вам, что такое IID интерфейса IResSrvDll
.
Снова отредактируйте: Вы можете попробовать изменить указанный вами член перечисления из ComInterfaceType
. Они должны быть для IDispatch
и "dual" - хотя, поскольку ваш объект не поддерживает IDispatch
, ни один из них не должен быть правильным выбором. Параметр IUnknown
(который отображается в вашем примере кода) должен работать, что указывает на неправильность IID.