日期:2014-05-19  浏览次数:20966 次

form调用C++写的dll正常,asp.net调用出错(dll会访问一些外部文件)
大家好,有个c++   写的dll在form中调用正常,一摸一样的代码到asp.net中就不行了,dll会访问外部文件,被访问的文件我权限都给了,还是不行。
我把dll包在windows   service中间也还是不行。
想请假大家一下,form中执行外部dll是不是有什么特殊的权限?着急啊,劳驾各位帮忙了!


------解决方案--------------------
你可把dll进行再包装一层
Let 's do an experiment with inline assembly in a DLL. I can not call assembly language from C# but I know I can call unmanaged DLLs from C#. I 'll make a DLL which calculates the speed of CPU, vendor name, Family, Model and Stepping of CPU using in line assembly language.

Program 7
// SysInfo.cpp
// written by Zeeshan Amjad

#include "SysInfo.h "

BOOL __stdcall DllMain(HINSTANCE hInst, DWORD dwReason, LPVOID lpReserved) {
return TRUE;
}

extern "C " __declspec(dllexport) int __stdcall getCPUSpeed() {
LARGE_INTEGER ulFreq, ulTicks, ulValue, ulStartCounter, ulEAX_EDX, ulResult;

// it is number of ticks per seconds
QueryPerformanceFrequency(&ulFreq);

// current valueofthe performance counter
QueryPerformanceCounter(&ulTicks);

// calculate one second interval
ulValue.QuadPart = ulTicks.QuadPart + ulFreq.QuadPart;

// read time stamp counter
// this asm instruction load the highorder 32 bit of the register into EDX
// and the lower order 32 bits into EAX
_asm {
rdtsc
mov ulEAX_EDX.LowPart, EAX
mov ulEAX_EDX.HighPart, EDX
}

// start no of ticks
ulStartCounter.QuadPart = ulEAX_EDX.QuadPart;

// loop for 1 second
do {
QueryPerformanceCounter(&ulTicks);
} while (ulTicks.QuadPart <= ulValue.QuadPart);

// get the actual no of ticks
_asm {
rdtsc
mov ulEAX_EDX.LowPart, EAX
mov ulEAX_EDX.HighPart, EDX
}

// calculate result
ulResult.QuadPart = ulEAX_EDX.QuadPart - ulStartCounter.QuadPart;

return (int)ulResult.QuadPart / 1000000;
}

extern "C " __declspec(dllexport) char* __stdcall getCPUType() {
static char pszCPUType[13];
memset(pszCPUType, 0, 13);

_asm {
mov eax, 0
cpuid

// getting information from EBX
mov pszCPUType[0], bl
mov pszCPUType[1], bh

ror ebx, 16
mov pszCPUType[2], bl
mov pszCPUType[3], bh

// getting information from EDX
mov pszCPUType[4], dl
mov pszCPUType[5], dh

ror edx, 16
mov pszCPUType[6], dl
mov pszCPUType[7], dh

// getting information from ECX
mov pszCPUType[8], cl
mov pszCPUType[9], ch

ror ecx, 16
mov pszCPUType[10], cl
mov pszCPUType[11], ch
}

pszCPUType[12] = '\0 ';

return pszCPUType;
}

extern "C " __declspec(dllexport) int __stdcall getCPUFamily() {
int retVal;

_asm {
mov eax, 1
cpuid
mov retVal, eax
}

return (retVal > > 8);
}

extern "C " __declspec(dllexport) int __stdcall getCPUModel() {
int retVal;

_asm {
mov eax, 1
cpuid
mov retVal, eax
}

return ((retVal > > 4 ) & 0x0000000f);
}

extern "C " __declspec(dllexport) int __stdcall getCPUStepping() {
int retVal;

_asm {
mov eax, 1
cpuid
mov retVal, eax
}

return (retVal & 0x0000000f);
}