Если Ваша долгосрочная цель состоит в том, чтобы мигрировать на использование Знатока для управления всем процессом сборки (который мог бы намереваться сделать для новых проектов нового строительства), то я сердечно рекомендую использовать Знатока файлы pom.xml для управления зависимостями от имени Муравья файлы build.xml. Конечный результат состоит в том, что и Ваши проекты нового строительства и Ваши проекты прежней версии тогда все используют тот же механизм для управления зависимостями. И оказывается, что Знаток действительно делает лучшее задание руководящих зависимостей для Муравья файлы build.xml, чем делает Ivy.
До принятия Знатока как наш ведущий инструмент сборки, я сделал, чтобы разработчик попытался использовать Ivy в комбинации существующему Муравью файлы build.xml. Это было самым расстраивающим опытом, которые очень скоро приводят нас отклонять Ivy. Мы продолжили принятие Знатока. Наши проекты нового строительства начали создаваться с подходом Знатока запаса, и т.д.
Однако я вернулся к устаревшим проектам Муравья и начал использовать задачу Ant Знатока для определения определений пути к классу (и иногда других определений свойства Ant, втянутых из pom.xml). Это оказалось самым превосходным опытом. Существующие файлы build.xml Муравья должны только быть измененными немного для использования интеграции муравья Знатока для определения любого пути к классу, которые использовались в файле build.xml. Все зависимости, требуемые проектом, стали определенными в сопроводительном файле pom.xml, который обрабатывается Знатоком через задачу Ant, включенную в файлы build.xml.
объемы Знатока могут использоваться для точной настройки определений пути к классу, таким образом, что одно подходящее для компиляции или рабочий модульный тест, или для упаковки, и др., может быть установлено. Кроме того, в значительной степени на любой элемент чего-то определенного в файле pom.xml можно сослаться как свойство Ant в файле build.xml.
Действительно с задачей Ant для Знатока нет никакой жизнеспособной причины для Ivy даже существовать.
Вы захотите использовать extern «C»
, а также __ declspec (экспорт)
, например:
extern "C" _declspec(dllexport) bool TestFunc()
{
return true;
}
Для получения полной информации, см. MSDN по типам маршалинга .
Расширение правильного ответа Рида.
Другая проблема, с которой вы можете столкнуться при раскрытии функции C ++ через PInvoke, - это использование недопустимых типов. PInvoke действительно может поддерживать только маршалинг примитивных типов и простых старых типов структур / классов данных.
Например, предположим, что TestFunc имеет следующую сигнатуру
void TestFunc(std::string input);
Даже добавления extern «C» и __ declspec (dllexport)
будет недостаточно для открытия функции C ++. Вместо этого вам нужно будет создать вспомогательную функцию, которая предоставляет только типы, совместимые с PInvoke, а затем вызывается в основной функции. Например,
void TestFunc(const std::string& input) { ... }
extern "C" _declspec(dllexport) void TestFuncWrapper(char* pInput) {
std::string input(pInput);
TestFunc(input);
}
$('div.band div.member');
предоставит вам объект jQuery, содержащий Объект jQuery представляет собой объект, подобный массиву, в котором каждому согласованному элементу присваивается числовое свойство (например, индекс) объекта, а также определяется свойство или . Вместо того, чтобы выбирать все элементы, вы можете указать, чтобы выбрать определенный элемент в соответствии с положением в DOM. Например или EDIT: Вот плагин, который я только что выбил Вот Рабочая демонстрация . добавьте / edit к URL-адресу, чтобы увидеть код. Если вам нужны какие-либо подробности о том, как это работает, оставьте комментарий.
, которые являются потомками div с class группа
.
length
. Чтобы получить один элемент, это // first element
$('div.band div.member')[0];
// first element
$('div.band div.member').get(0);
// get the first div with class member element
$("div.band div.member:eq(0)")
// get the first div with class member element
$("div.band div.member:nth-child(1)")
(function($) {
$.fn.randomize = function(childElem) {
return this.each(function() {
var $this = $(this);
var elems = $this.children(childElem);
elems.sort(function() { return (Math.round(Math.random())-0.5); });
$this.detach(childElem);
for(var i=0; i < elems.length; i++)
$this.append(elems[i]);
});
}
})(jQuery);
Компилятор C ++ изменяет имена ваших функций, чтобы включить информацию о параметрах и типах возврата. Это называется искажением имени. С другой стороны, компилятор C не искажает имена ваших функций.
Вы можете указать компилятору C ++ работать как компилятор C, используя extern "C"
:
extern "C" __declspec(dllexport) bool TestFunc { return true; }
Для вызова функций из C # с использованием P / Invoke, ваши имена не должны изменяться. Следовательно, вы действительно можете экспортировать функции C в C #. Если вы хотите, чтобы функциональность была реализована на C ++, вы можете написать функцию C, которая просто вызывает функцию C ++, реализующую эту функциональность.