Компиляторы иногда отбрасывают отладочную информацию для «неиспользуемых идентификаторов». Отладочная информация может быстро стать огромной, поэтому даже при -O0 компиляторам придется проделать определенную работу, чтобы гарантировать, что они не выдают больше информации, чем необходимо. Определение «нужного» сложнее сказать, чем сделать, но, безусловно, оно должно сохранить все локальные переменные и давайте.
Так что, мне кажется, этот стоит написать об ошибке на быстром компиляторе. Особенно странно, что swiftc выдает отладочную информацию для ny
, но не nx
. Вы используете ny
позже в этой функции?
Если вы регистрируете ошибку, пожалуйста, включите в нее сборочный файл .swift или проект, который показывает ошибку.
Сильно препятствовавший. Я рекомендовал бы использовать формат C-friendly (например, CSVs) вместо XLS, или использовать новое XML форматы (выберите на библиотеках XML и ZIP).
однако, для быстрого исправления, Вы могли экспортировать в заключенный в кавычки CSV и затем импортировать использование VBScript. Что-то как это , хотя я попытался бы заставить это работать в VBA сначала.
Примечание, что это потребует копии Office и не масштабируется хорошо (но Вы может скрывать окно Excel).
<час>я только что нашел xlsLib, поэтому если действительно необходимо записать непосредственно в C, дайте ему движение! Будьте осторожны, хотя, потому что очень трудно разобраться, особенно если Вы пишете в уже существующие файлы.
Там также существует LibExcel, но это - C++, таким образом, необходимо было бы скомпилировать обертку вокруг или переписать для C.
<час>Один заключительный протест: причина я не искал их в запуске, состоит в том, что чрезвычайно трудно разобраться. Я не пользовался библиотеками выше, но я подозреваю, что они прервут странные и необычные пути. Я полагаю, что Вы читали , Joel берет форматы Office.
Excel, как другие Продукты Office, экспортирует свои кишки по COM. Это доступно для использования в C++, VB, C#, и независимо от того, что другие языки имеют взаимодействующий с COM - при условии, что Вы работаете в Windows и установили Excel. (Вы не можете добраться до COM из плоскости C. Удачно ли это, или неудачный ваше дело.)
COM является кровавой грязной болью для неуправляемых языков, все же. Следующий VB:
Set objExcel = CreateObject("Excel.Application") ' start or use existing Excel
objExcel.Visible = True ' show the window
objExcel.Workbooks.Add ' create an empty workbook
примерно переводит в следующий C++:
#include <assert.h>
#include <ole2.h>
#include <tchar.h>
int main() {
HRESULT hr;
IDispatch *objExcel, *objWorkbooks;
CLSID clsid;
DISPID id, id2;
DISPPARAMS p;
VARIANT v;
TCHAR *name;
CoInitialize(NULL);
hr = CLSIDFromProgID(_T("Excel.Application"), &clsid);
assert(SUCCEEDED(hr));
hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER,
IID_IDispatch, (LPVOID *)&objExcel);
assert(SUCCEEDED(hr));
id2 = DISPID_PROPERTYPUT;
name = _T("Visible");
hr = objExcel->GetIDsOfNames(IID_NULL, &name, 1, LOCALE_USER_DEFAULT, &id);
assert(SUCCEEDED(hr));
VariantInit(&v);
v.vt = VT_I4;
v.lVal = 1;
p.cArgs = 1;
p.rgvarg = &v;
p.cNamedArgs = 1;
p.rgdispidNamedArgs = &id2;
hr = objExcel->Invoke(id, IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYPUT, &p, NULL, NULL, NULL);
assert(SUCCEEDED(hr));
name = _T("Workbooks");
hr = objExcel->GetIDsOfNames(IID_NULL, &name, 1, LOCALE_USER_DEFAULT, &id);
assert(SUCCEEDED(hr));
p.cArgs = 0;
p.rgvarg = NULL;
p.cNamedArgs = 0;
p.rgdispidNamedArgs = NULL;
hr = objExcel->Invoke(id, IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET, &p, &v, NULL, NULL);
assert(SUCCEEDED(hr));
objWorkbooks = v.pdispVal;
name = _T("Add");
hr = objWorkbooks->GetIDsOfNames(IID_NULL, &name, 1, LOCALE_USER_DEFAULT, &id);
assert(SUCCEEDED(hr));
p.cArgs = 0;
p.rgvarg = NULL;
p.cNamedArgs = 0;
p.rgdispidNamedArgs = NULL;
hr = objWorkbooks->Invoke(id, IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET, &p, NULL, NULL, NULL);
assert(SUCCEEDED(hr));
return 0;
}
У меня есть маленькое расширение материала ephemient, отправил. Существует очень удобная библиотека, доступная с простотой огорченное с интерфейсом IDispatch. http://disphelper.sourceforge.net/
Это - всего один файл, который Вы добавляете к своим проектам, но это делает IDispatch, программирующий с C почти забава ;-)
Свободная библиотека, но опять-таки это C++, а не C: ExcelFormat