Таблицы не в общем легче или более удобны в сопровождении, чем CSS. Однако существуют некоторые конкретны проблемы расположения, где таблицы являются действительно самым простым и наиболее гибким решением.
CSS явно предпочтителен в случаях, где представляемая разметка и CSS поддерживают тот же вид дизайна, никто в их правильном уме не утверждал бы, что font
- теги лучше, чем определение книгопечатания в CSS, так как CSS дает Вам то же питание, чем font
- теги, но намного более чистым способом.
проблема с таблицами, однако, в основном, что модель макета таблицы в CSS не поддерживается в Microsoft Internet Explorer. Таблицы и CSS поэтому не эквивалентны в питании. Недостающая часть подобное сетке поведение из таблиц, где края ячеек выравниваются и вертикально и горизонтально, в то время как ячейки все еще расширяются для содержания их содержания. Это поведение не легко достигнуть в чистом CSS без жесткого кодирования некоторых размеров, который делает дизайн твердым и хрупким (как долго, поскольку мы должны поддерживать Internet Explorer - в других браузерах, это легко достигается при помощи display:table-cell
).
, Таким образом, это не действительно вопрос или таблицы или CSS, предпочтительно, но это - вопрос распознавания конкретных случаев, где использование таблиц может сделать расположение более гибким.
самой важной причиной не таблицы использования является доступность. Инструкции по Доступности веб-контента http://www.w3.org/TR/WCAG10/ совет против использования таблиц для расположения. Если Вы обеспокоены доступностью (и в некоторых случаях можно по закону быть обязаны к), необходимо использовать CSS, даже если таблицы более просты. Обратите внимание, что Вы можете всегда , создают то же расположение с CSS как с таблицами, могло бы просто требоваться больше работы.
Я использую комбинацию интеллектуальных COM-указателей ATL и класса ATL :: CAxWindow для COM-объектов и компонентов. Я считаю, что интеллектуальные указатели особенно удобны.
http://www.murrayc.com/learning/windows/usecomfromatl.shtml
http://76.105.92.243/notes/atlcom.html#import
http://msdn.microsoft.com/en-us/library/yx242b61%28VS.80%29.aspx
Я приветствую ваши усилия по переходу на собственный C ++ для работы с COM - вам нужно пройти через боль, чтобы по-настоящему оценить сегодняшнюю роскошную ( управляемая) среда разработки :)
Когда мир (и я) были моложе, книга Крейга Брокшмидта « Внутри OLE » была фолиантом для понимания COM (до COM даже был COM). Эта книга предшествует управляемому коду, поэтому здесь нет шансов на путаницу. Есть и второе издание.
Книги Дона Бокса " Essential COM " и "
Минимальные требования для создания экземпляра COM-объекта следующие:
1) Должен быть доступное COM-подразделение.
Это достигается большинством приложений путем вызова CoInitialize / CoInitializeEx для настройки библиотеки COM и начального COM-подразделения, если это первый раз для процесса.
2) Вызов CoCreateInstance / CoCreateInstanceEx для создания объект и укажите флаги для обозначения того, как он будет создан.
3) Правильно сбалансируйте вызовы AddRef и Release на интерфейсах любых COM-компонентов, которые вы создаете, вызывая последний Release (), когда вы закончите использовать COM компонент.
-
В управляемом приложении №1 почти всегда обрабатывается за вас. # 2 абстрагируется, если вы импортируете ссылку на библиотеку COM, и вы можете просто использовать импортированные имена, как если бы они были определениями классов .NET и т.п. №3 обрабатывается автоматически, но ваши потребности могут отличаться. К сожалению, иногда возникают причуды в обработке ссылок в управляемых приложениях, из-за которых COM-объекты могут оставаться дольше, чем предполагалось. Вспомогательный класс Marshal в System.Runtime имеет методы, которые могут помочь вам в случае возникновения проблем.
-
В неуправляемом приложении вам придется немного поработать, если вы создаете приложение с нуля.
Было бы полезно, если бы вы предоставили немного больше информации о том, что именно вы делаете. Знаете ли вы, какие интерфейсы реализует объект и т. Д.
В общем, API, с которым вы можете получить более конкретную помощь в Google, - это CoCreateInstance. Вам нужно будет передать ему GUID объекта, с которым вы хотите играть. Все COM-объекты реализуют интерфейс IUnknown, и вы можете запросить любые другие, которые он может иметь. Таким образом, некоторый пример псевдокода для начала может выглядеть примерно так:
CoInitializeEx( NULL, COINIT_APARTMENTTHREADED );
CoCreateInstance( CLSID,
ptrIUnknown,
ClassCxt, // generally CLSCTX_INPROC_SERVER,
riid , // reference id
(void **)&pRequest); // the interface that corresponds to the riid
Здесь вы можете запросить дополнительные интерфейсы, используя интерфейс IUnknown, полученный из ptrIUnknown.
Затем очистите с помощью
CoUninitialize()
Essential COM Дона Бокса - отличная книга по этой теме. Кроме того, просто для тестирования того, как работает ваш COM-объект, использование чего-то вроде VBScript упрощает эту задачу. Кроме того, это Вероятно, стоит отметить, что GUID идентификатора класса хранится несколько необычным образом, поэтому, если вы просто копируете GUID из реестра, у вас могут возникнуть проблемы с определением порядка. Хотя это, вероятно, для другого вопроса.
Try using #import from Visual C++. This will create smart pointer wrappers for the interfaces.