2013-11-26 1 views
1

Как говорит субъект, что я пытаюсь сделать, это похоже на this, но с использованием Visual Studio 2012.Изготовление C DLL в Visual Studio подходит для использования JS-ctypes в Mozilla

я могу строить и производить DLL, и я могу загрузить эту DLL в javascript, но я не могу получить доступ к функции в этой DLL. Глядя на DLL в DllExp, нет никаких функций, предлагающих что-то не так с DLL.

DLL - это новый проект на C++, созданный с использованием шаблона «Пустой проект». Известные настройки:

General-> Тип конфигурации, установленный в DLL
Без оптимизации.
Нет предварительно скомпилированных заголовков.
Compile, как C код
Вызов конвенции __cdecl

The commandlines для компиляции и связывания, в случае, если есть установка я не думал, что значительное, являются

/GS /TC /analyze- /W3 /Zc:wchar_t /ZI /Gm /Od /sdl /Fd"Debug\vc110.pdb" /fp:precise /D "_WINDLL" /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /Oy- /MDd /Fa"Debug\" /EHsc /nologo /Fo"Debug\" /Fp"Debug\StreamInterop.pch" 

И линкера

/OUT:"C:\Work\VehicleTracker-DotNet\StreamInterop\Debug\StreamInterop.dll" /MANIFEST /NXCOMPAT /PDB:"C:\Work\VehicleTracker-DotNet\StreamInterop\Debug\StreamInterop.pdb" /DYNAMICBASE "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /IMPLIB:"C:\Work\VehicleTracker-DotNet\StreamInterop\Debug\StreamInterop.lib" /DEBUG /DLL /MACHINE:X86 /INCREMENTAL /PGD:"C:\Work\VehicleTracker-DotNet\StreamInterop\Debug\StreamInterop.pgd" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"Debug\StreamInterop.dll.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /TLBI 

Проект содержит один исходный файл C, main.c, содержащий

#include<stdio.h> 
int add(int a,int b) 
{ 
    return(a+b); 
} 

Учитывая, что это все, что было необходимо в более раннем сообщении, мне кажется, что проблема должна быть в коммутаторах компилятора или компоновщика. Может ли кто-нибудь увидеть то, что мне не хватает?

+0

Эй! У меня есть аналогичные проблемы: http://stackoverflow.com/questions/27381478/exporting-functions-in-msvs-2013-in-c-c-dll-for-mozilla-js-ctypes-to-use. Является ли ваша библиотека DLL с использованием 64-битного или 32-битного кода? – user2173353

+0

Кажется, что бит 32 бит - в командной строке linker указывается kernel32.lib среди других. См. Комментарий Марка Толонен ниже о том, как на самом деле создать проект, - который оттолкнул многие трудности от мастера. –

+0

Спасибо. Мне удалось, наконец, найти решение. Это на предыдущей ссылке, которую я предоставил, если вам интересно. :) – user2173353

ответ

1

В Windows с помощью Visual Studio, чтобы экспортировать функцию из DLL, использования:

#include<stdio.h> 
__declspec(dllexport) int add(int a,int b) 
{ 
    return(a+b); 
} 

Как примечание стороны, не выбирают Пустой проект так Visual Studio будет генерировать некоторый пример кода для вас.

+0

Спасибо. Это заставляет его работать, хотя не понимаю, почему предыдущий плакат ему не нужен. Выбирайте пустой проект, потому что единственным конкретным проектом DLL является «MFC DLL», и я был обеспокоен тем, что создавал бы что-то, зависящее от некоторой структуры, которая остановила бы ее работу с js-типами. –

+0

Выберите «Win32 Project», затем «DLL» и «Экспорт символов». 'gcc' экспортирует все. VS требует явного экспорта. –

+0

Ooo. Спасибо, не знал, что волшебник существует. –