Я использовал Unimotion в своем приложении для чтения значений датчика движения для ноутбуков Apple, но не мог портировать код на 10,6 64-разрядных. (Я также попробовал SMSLib и не имел никакой удачи также.)
Если нет никакой альтернативы, я также рассматриваю исправление одной из библиотек. И Unimotion и SMSLib используют следующий вызов, который был удержан от использования в 10,5 и удален из 10,6 64-разрядных:
result = IOConnectMethodStructureIStructureO(
dataPort, kernFunc, structureInputSize,
&structureOutputSize, &inputStructure,
outputStructure);
(Это сообщение действительно не получило меня гораздо дальше),
Ладно, вместо того, чтобы ждать ответа, я запустил Visual Studio 2010 beta 2, и эта тестовая программа работает хорошо:
class Foo
{
public string foo = "Foo!";
}
class Bar
{
public int bar = 42;
}
class Program
{
static void Main(string[] args)
{
var test = new List<dynamic>();
test.Add(new Foo());
test.Add(new Bar());
Console.WriteLine(test[0].foo.Substring(0,3));
Console.WriteLine(test[1].bar.ToString("000"));
Console.ReadKey(true);
}
}
Я хотел убедиться, что не только я проверял свойства с разными именами, но они также были разных типов и что я использовал функции в каждом типе, которые несовместимы друг с другом. Это , кажется, предполагает, что если что-либо кэшировано, среда выполнения достаточно умна, чтобы знать, когда использовать кэш, а когда нет. Я все еще хотел бы услышать, знает ли кто-нибудь краевое дело, где это может не держаться, или более авторитетный комментарий о том, почему это произойдет.
-121--3186068- У вас есть различные причины для все еще большого размера git репо после git gc
, так как он не удаляет все свободные объекты .
Я подробно описываю эти причины в « уменьшите размер репозитория git »
Но одним из трюков для проверки в вашем случае было бы клонировать ваше «очищенное» репо Git и посмотреть, имеет ли клон соответствующий размер.
(«» очищенное «репо» быть то, где вы применили фильтр-ветвь
, а затем gc
и обрезку
)
Если нет альтернативы, я также рассматриваю возможность исправления одной из библиотек. Как Unimotion, так и SMSLib используют следующий вызов, который устарел в 10.5 и удален из 10.6 64-разрядных :
result = IMKonnectMethodStrucureIStrucureO ( dataPort, kernFunc, структура InputSize, & структура OutputSize, & inputStructure, outputStructure);
Есть ли какой-то простой способ заменить это новыми вызовами IOKit?
Этот самый документ предлагает замены. Как насчет этого?
kern_return_t
IOConnectCallStructMethod(
mach_port_t connection, // In
uint32_t selector, // In
const void *inputStruct, // In
size_t inputStructCnt, // In
void *outputStruct, // Out
size_t *outputStructCnt) // In/Out
Насколько я могу судить, не должно быть никакой разницы, кроме порядка аргументов. Тем не менее, я никогда не использовал набор ввода-вывода, поэтому я мог упустить некоторые критические концептуальные различия, которые заставят этот звонок не работать, как старый.