Если вопрос о том, что вы публикуете эту консоль, отображается, просто сделайте ваш exe1 ... exeN невидимым. Самый простой способ - заменить
int main(int argc, char **argv)
с
int WINAPI WinMain(
HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
И смените цель с консольного приложения на приложение Windows.
Другое (и лучшее решение) - преобразование приложения в несколько библиотек DLL с функциями - это более элегантно и гибко.
EDITED
После прояснения проблемы: «Как я тогда вызываю функции в этих dll?» короткий ответ: вам нужна функция экспорта из каждой dll exe1, .. exeN. Полный ответ - следуйте инструкциям:
В вашей dll объявите
extern "C" __declspec(dllexport) SameNameForAllDllFunction(LPCWSTR fileName){ ...
Это создаст функцию, которую можно экспортировать по имени _SameNameForAllDllFunction
. Обратите внимание, что имя файла - Unicode - это упростит связь с C #.
Теперь давайте напишем часть C #:
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate void DoSomeWithFile(String fileName);
Это объявляет тип функции. И код вызова:
IntPtr pDll = NativeMethods.LoadLibrary(@"exe1.DLL");
//here MUST go error handlers
try{
IntPtr pAddressOfFunctionToCall = NativeMethods.GetProcAddress(
pDll, "SameNameForAllDllFunction");
//here MUST go error handlers
DoSomeWithFile dllFunct = (DoSomeWithFile)Marshal.GetDelegateForFunctionPointer(
pAddressOfFunctionToCall, typeof(DoSomeWithFile));
dllFunct("TestFile1.txt"); //now call the function
} finally {
NativeMethods.FreeLibrary(pDll);
}