Member 13703287 Ответов: 0

Сбой приложения для C++/CLI DLL и exe x64 bit


Just to showcase problem I have written a simple DLL x64 of "Hello world" changed its property to CLR and Calling its Function from an Exe which is also x64 and property Changed to CLR.

But My exe prints the Output "Hello World" and crashes every time and gives FAULT Module Name KERNELBASE.dll.

When I change Property of both to NO CLR it works perfectly fine. This happens only for x64 application not observed in x86 program.

I am using Visual Studio 2017 on Windows Server 2012.

It will be very helpful if someone can guide me to correct direction.

Details of App Crash

Problem Event Name: APPCRASH
  Application Name: consuming_using_clr.exe
  Application Version:  0.0.0.0
  Application Timestamp:    5b42fff3
  Fault Module Name:    KERNELBASE.dll
  Fault Module Version: 6.3.9600.17055
  Fault Module Timestamp:   532954fb
  Exception Code:   c0020001
  Exception Offset: 0000000000005bf8
  OS Version:   6.3.9600.2.0.0.16.7
  Locale ID:    1033
  Additional Information 1: 8e72
  Additional Information 2: 8e72455f15a8480830570fcb3c4abf60
  Additional Information 3: f8d5
  Additional Information 4: f8d519c5149c6c561af747d4db7e910a

DLL dot.h file

// The following ifdef block is the standard way of creating macros which make exporting 
// from a DLL simpler. All files within this DLL are compiled with the DLLWINDOWSDESKTOPWIZARD_EXPORTS
// symbol defined on the command line. This symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see 
// DLLWINDOWSDESKTOPWIZARD_API functions as being imported from a DLL, whereas this DLL sees symbols
// defined with this macro as being exported.
#ifdef DLLWINDOWSDESKTOPWIZARD_EXPORTS
#define DLLWINDOWSDESKTOPWIZARD_API __declspec(dllexport)
#else
#define DLLWINDOWSDESKTOPWIZARD_API __declspec(dllimport)
#endif
#using<System.dll>
#include<iostream>
using namespace System;
using namespace std;
// This class is exported from the Dll_windows_desktop_wizard.dll
class DLLWINDOWSDESKTOPWIZARD_API CDllwindowsdesktopwizard 
{

public:
    CDllwindowsdesktopwizard(void);
    ~CDllwindowsdesktopwizard(void);
    void helloworld();

};

*DLL DOT CPP File *

// Dll_windows_desktop_wizard.cpp : Defines the exported functions for the DLL application.
//

#include "stdafx.h"
#include "Dll_windows_desktop_wizard.h"


// This is the constructor of a class that has been exported.
// see Dll_windows_desktop_wizard.h for the class definition

CDllwindowsdesktopwizard::CDllwindowsdesktopwizard(void)
{
}

CDllwindowsdesktopwizard::~CDllwindowsdesktopwizard(void)
{
}

void CDllwindowsdesktopwizard::helloworld()
{
    Console::WriteLine("Hello World");
}

EXE Calling DLL Function

#include<iostream>
#include "Dll_windows_desktop_wizard.h"
using namespace System;

int main()
{
    CDllwindowsdesktopwizard lv_obj;
    lv_obj.helloworld();
    return 0;
}


Что я уже пробовал:

Я просканировал сервер, но не нашел ни одного поврежденного файла.

Jochen Arndt

Исключение (код состояния NT) 0xC0020001-это RPC_NT_INVALID_STRING_BINDING / "привязка строки недопустима".

Я не так хорошо знаком с CLI. Может быть статья Лучшие готы C++/CLI может дать вам некоторое представление.

Member 13703287

После того как вы сказали я начал удалять предупреждение из моего exe файла
предупреждение:вызов управляемого 'DllMain': управляемый код не может быть запущен под блокировкой загрузчика,включая точку входа DLL и вызовы, достигаемые из точки входа DLL
и получил #pragma unmanaged во время Гугла. Добавил его в dllmain.cpp и это сработало.
Спасибо за предложение.:)

0 Ответов